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列,有时使用破折号作为分隔符,我需要用斜杠而不是短划线显示该字符串,怎么做?或者该专栏是真实的日期专栏? – Tim 2013-02-21 14:59:27

+0

[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 使用ANSI - ** 92 ** SQL标准(** 20年前**!)废止旧式*逗号分隔的表*样式列表。 ***请***停止使用它 – 2013-02-21 15:31:15

回答

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) 

仅供参考,您需要style 103 for dd/mm/yyyy

+0

感谢您的回复,我需要的日期格式为dd/mm/yy ..你对此有任何想法..除了转换功能不工作。 – 2013-02-21 15:10:21

+0

那么,它不会转换日期格式..我可以做什么 – 2013-02-21 15:24:05

+0

@ Adalarasan_THINK-BIG:我是。但是什么数据在PGD30_TRACKED_ADJUSTMENT_X?什么数据类型?什么格式? – gbn 2013-02-21 15:29:55