【发布时间】:2013-02-21 14:54:36
【问题描述】:
我使用的是 SQL Server 2008 R2。我需要检查列值是否同时有"-",我在这里使用case 语句。
如果存在"-",那么我需要将日期格式更改为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
【问题讨论】:
-
问题是,“我将日期的字符串表示形式存储在 varchar 列中。有时使用破折号作为分隔符。我需要用斜杠而不是破折号显示该字符串。怎么做?”还是该列是真实的日期列?
-
Bad habits to kick : using old-style JOINs - ANSI-92 SQL 标准 ( 20 年前!)。 请停止使用
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2