如何使用格式MMM / DD / YY或MMM / DD / YYYY验证日期字段?

时间:2017-11-17 07:27:54

标签: sql sql-server sql-server-2008 sql-server-2005

我的字段包含字符串值,如JUL / 11/2017,JAN / 11/17。虽然它是一个有效的字段,但我无法使用is_date函数验证它

SET DATEFORMAT MDY;  
if isdate('JUL/11/2017')=1
print 'VALID_DATE'
else
print 'invalid date'

如果字段值为DD / MMM / YY或DD / MMM / YYYY,则可以正常工作。任何人都可以帮我验证这个领域。

注意:我也尝试过使用set语言选项。

4 个答案:

答案 0 :(得分:6)

您只需要用空格替换'/'分隔符即可获得109种数据格式:

SET DATEFORMAT MDY;  
if isdate(replace('JUL/11/2017', '/', ' '))=1
print 'VALID_DATE'
else
print 'invalid date'

答案 1 :(得分:2)

您确定以下格式为OK,对吗?

DD/MMM/YY 
DD/MMM/YYYY

然后,我们可以做的是转换MMM/DD/YYMMM/DD/YYYY格式,并检查日期是否有效:

DECLARE @Date01 VARCHAR(12) = 'JAN/11/17';
DECLARE @Date02 VARCHAR(12) = 'JAN/11/2017';

DECLARE @NewDate VARCHAR(12);

DECLARE @xml XML;
SET @xml = CAST(N'<t>' + REPLACE(@Date01,'/','</t><t>') + '</t>' AS XML);

SELECT STUFF
(
    (
        SELECT '/' + c.value('.','varchar(MAX)') as item              
        FROM  @xml.nodes('/t') as T(c)
        ORDER BY CASE ROW_NUMBER() OVER(ORDER BY T.c) 
                 WHEN 1 THEN 2
                 WHEN 2 THEN 1
                 WHEN 3 THEN 3
                 END
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(12)')
    ,1
    ,1
    ,''
);

答案 2 :(得分:2)

尝试以下方法:

DECLARE @Date VARCHAR(20)='JUL/11/2017'

SELECT @Date=STUFF(STUFF(@Date,1,3,RIGHT(LEFT(@Date,6),2)),4,2,LEFT(@Date,3))--,LEFT(@Date,3),RIGHT(LEFT(@Date,6),2)

IF ISDATE(@Date)=1
print 'VALID_DATE'
else
print 'INVALID_DATE'

答案 3 :(得分:1)

您也可以尝试以下方法:

DECLARE @DATE_FIELD VARCHAR(15) = 'JUL/11/2017' --'JAN/11/17'
    IF (ISDATE(REVERSE(LEFT(REVERSE(@DATE_FIELD),CHARINDEX('/',REVERSE(@DATE_FIELD),1)-1))+'-'+ LEFT(@DATE_FIELD,CHARINDEX('/',@DATE_FIELD,1)-1)+'-'+SUBSTRING(@DATE_FIELD,CHARINDEX('/',@DATE_FIELD,1)+1,LEN(@DATE_FIELD)-CHARINDEX('/',@DATE_FIELD,1)-CHARINDEX('/',REVERSE(@DATE_FIELD),1))) = 1)
    PRINT 'VALID_DATE'
    ELSE
    PRINT 'INVALID_DATE'

感谢。