我的字段包含字符串值,如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语言选项。
答案 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/YY
和MMM/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'
感谢。