2012-06-13 145 views
-1

我有一張表,其中有一列,ci_birthday。該列聲明爲nvarchar(50),格式爲mm-dd-yyyy。該表中的數據是這樣的:#從日期開始獲取月份和日期#

CI_BIRTHDAY 
----------- 

07/14/1956 
NULL 
NULL 
11/01/1969 
08/15/1955 
07/08/1965 
NULL 
NULL 
09/20/1936 
NULL 
NULL 
NULL 
NULL 
0/0/0 
NULL 
NULL 
NULL 
NULL 
NULL 
0/0/0 
NULL 
NULL 
1/29/1940 
NULL 
0/0/0 
NULL 
NULL 
NULL 
NULL 
08/11/1949 

我想從該列的產量也只有一個月,一天,像

09/20 
0/0 
1/29 
08/11 
0/0  
+2

0/0有效月份/天究竟如何? –

+0

如果您使用了日期字段,您可以使用內置的SQL Server MONTH()和DAY()函數? – Jake1164

+1

另外你說這是mm-dd-yyyy,那爲什麼是07/14/1956?有時0/0/0和有時領先0缺失(例如1/29/1940)?我強烈建議您清理這些數據並使用正確的數據類型。你絕對沒有理由在nvarchar(50)中存儲生日。沒有。 –

回答

0

我接受我的方案是解決這個的一個很不錯的方法,但如果日期不存儲在一個日期格式(在這種情況下,它是一個字符串),那麼你可以做這樣的事情:

DECLARE @Date varchar(15) = '11/01/1969' 
SELECT SUBSTRING(@Date, 1,LEN(@Date) - PATINDEX('%/%',REVERSE(@Date))) 
0

爲了表明檢查它的安全之後怎麼投這個很凌亂的數據爲日期去做所以:

SET DATEFORMAT mdy; 

WITH Dates 
      AS (SELECT '07/14/1956' AS DateStr 
       UNION 
       SELECT '11/01/1969' 
       UNION 
       SELECT '08/15/1955' 
       UNION 
       SELECT '07/08/1965' 
       UNION 
       SELECT '09/20/1936' 
       UNION 
       SELECT '0/0/0' 
       UNION 
       SELECT NULL 
       UNION 
       SELECT '1/29/1940' 
      ) 
    SELECT CASE WHEN ISDATE(DateStr) = 1 THEN CONVERT(VARCHAR(5), CONVERT(DATE, DateStr, 101), 101) 
       ELSE '00/00' 
      END AS [DD/MM] 
    FROM Dates 
相關問題