2012-06-13 112 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 
相关问题