0

Я использую SQL Server 2008 R2. Мне нужно проверить, имеет ли значение столбца "-" или нет, я использую оператор case для использования здесь.Как проверить наличие в SQL Server 2008 R2?

Если присутствует "-", то мне нужно изменить формат даты на dd/mm/yy. Данная дата в базе данных: "2013-01-01 00:00:00.000" to "dd/mm/yy"

У вас есть какие-либо идеи по этому поводу?

Мой код:

select 
    DISTINCT 
    D30.SPGD30_SHIP_SITE_C As ShipSite, D30.SPGD30_RATING_MONTH_Y As RatingMonth, 
    D30.SPGD30_PRIOR_SCORE_R As Prior, D30.SPGD30_REVISED_SCORE_R As Revised, 
    CASE 
     WHEN SUBSTRING(D30.SPGD30_TRACKED_ADJUSTMENT_X, 1, 1) = 'D' 
     THEN 'Dispute - ' + D30.SPGD30_TRACKED_ADJUSTMENT_X 
     WHEN SUBSTRING(D30.SPGD30_TRACKED_ADJUSTMENT_X, 1, 1) = 'R' 
     THEN 'Return Of Points - '+D30.SPGD30_TRACKED_ADJUSTMENT_X 
     WHEN containstable(D30.SPGD30_TRACKED_ADJUSTMENT_X, '"*-" or "-*"') 
     THEN 'Score Calculation - ' + CONVERT(VARCHAR(8), D30.SPGD30_TRACKED_ADJUSTMENT_X, 1) 
    END AS Adjustments, 
    J02.SPGJ02_MSG_CODE_X As Comments, 
    D31.SPGA04_RATING_ELEMENT_D As Comments, 
    D30.SPGD30_LAST_TOUCH_Y As LastUpdated, 
    D30.SPGD30_LAST_TOUCH_C As LastUpdatedCDSID 
FROM 
    CSPGD30_TRACKING D30, CSPGD31_TRACKING_RATING_ELEMNT D31, 
    CSPGA04_RATING_ELEMENT_MSTR A04 , CSPGJ02_MSG_OBJ J02, CSPGJ03_MSG_TRANSLN J03 
WHERE 
    D30.SPGD30_SHIP_SITE_C = D31.SPGD30_SHIP_SITE_C -- D30 and D31 
    AND D30.SPGD30_RATING_MONTH_Y = D31.SPGD30_RATING_MONTH_Y --D30 and D31 
    AND D31.SPGA04_RATING_ELEMENT_D = A04.SPGA04_RATING_ELEMENT_D --D31 and A04 
    AND J02.SPGJ02_MSG_K = J03.SPGJ02_MSG_K --J02 and J03 
    AND A04.SPGJ02_MSG_K = J02.SPGJ02_MSG_K --A04 and Jo2 
    AND d30.SPGA02_BUSINESS_TYPE_C = 'prod' -- org 
    AND d30.SPGA03_REGION_C = 'EU' -- region 
    AND d30.SPGD30_SHIP_SITE_C = 'ms01a' -- shipsite 
    AND D30.SPGD30_LAST_TOUCH_Y BETWEEN '2013-01-01 00:00:00.000' --rating month 
            AND '2013-01-30 23:59:59.000' -- rating month 
    AND d30.SPGD30_LAST_TOUCH_C = 'sadalara' --CDSID 
+1

вопрос, «Я храню строковое представление даты в varchar column. Иногда в качестве разделителя используется тире. Мне нужно отобразить эту строку с косой чертой вместо тире. Как это сделать? " Или колонка столбца даты bona-fide? – Tim

+0

[Плохие привычки пинать: использование старинного JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - стиль старого стиля * разделенных запятыми таблиц * был отменен с помощью ANSI - ** 92 ** SQL Standard (** 20 лет ** назад!). *** Пожалуйста, *** прекратите использовать его –

ответ

4

Просто используйте CHARINDEX для тестирования

... 
when CHARINDEX('-*', D30.SPGD30_TRACKED_ADJUSTMENT_X) > 0 OR 
    CHARINDEX('*-', D30.SPGD30_TRACKED_ADJUSTMENT_X) > 0 

THEN 'Score Calculation - '+CONVERT(VARCHAR(8), D30.SPGD30_TRACKED_ADJUSTMENT_X, 1) 

FYI, вам нужно style 103 for dd/mm/yyyy

+0

спасибо за ваш ответ Мне нужен формат даты dd/mm/yy..do у вас есть представление об этом .. в дополнение к этому функция преобразования не работает. –

+0

r u там, он не конвертирует формат даты. Что я могу сделать –

+0

@ Adalarasan_THINK-BIG: Я. Но какие данные находятся в PGD30_TRACKED_ADJUSTMENT_X? какой тип данных? какие форматы? – gbn

Смежные вопросы