当我使用 IIF 时,为什么此日期转换在我的 table 中的某些行上失败,而在其他行上却没有
Why does this conversion to date fail on some rows in my table and not other rows when I use an IIF
我有这个 table 和数据:
CREATE TABLE dbo.tBadDate
(
BadDateID int NOT NULL,
StartDate nchar(20) NULL,
CONSTRAINT [PK_tBadDate] PRIMARY KEY CLUSTERED
(
[BadDateID] ASC
)
);
INSERT dbo.tBadDate (BadDateID, StartDate) VALUES
(1, N'1/1/2020 '),
(2, N'Jan 1 2021 '),
(3, N'January 1 2021 '),
(4, N'Ja 1 2021 '),
(5, N'Jan,1,2021 '),
(6, N'2021.1.1 '),
(7, N'8/8/1981 '),
(8, NULL),
(9, N'January First, 2021 ');
此脚本有效:
SELECT StartDate, ISDATE(StartDate) from tBadDate;
此脚本失败:
SELECT StartDate, IIF(ISDATE(StartDate) = 1 , CONVERT(DATE,
startDate), 'Undefined Format')
FROM tBadDate
Msg 241, Level 16, State 1
Conversion failed when converting date and/or time from character string.
您可以将 try_convert
与 cross apply
一起使用
select StartDate,
Iif(x.v is null,0,1) ValidDate,
IsNull(Cast(v as varchar(20)),'Undefined Format')
from tBadDate
cross apply (values(Try_Convert(date,StartDate)))x(v)
我有这个 table 和数据:
CREATE TABLE dbo.tBadDate
(
BadDateID int NOT NULL,
StartDate nchar(20) NULL,
CONSTRAINT [PK_tBadDate] PRIMARY KEY CLUSTERED
(
[BadDateID] ASC
)
);
INSERT dbo.tBadDate (BadDateID, StartDate) VALUES
(1, N'1/1/2020 '),
(2, N'Jan 1 2021 '),
(3, N'January 1 2021 '),
(4, N'Ja 1 2021 '),
(5, N'Jan,1,2021 '),
(6, N'2021.1.1 '),
(7, N'8/8/1981 '),
(8, NULL),
(9, N'January First, 2021 ');
此脚本有效:
SELECT StartDate, ISDATE(StartDate) from tBadDate;
此脚本失败:
SELECT StartDate, IIF(ISDATE(StartDate) = 1 , CONVERT(DATE,
startDate), 'Undefined Format')
FROM tBadDate
Msg 241, Level 16, State 1
Conversion failed when converting date and/or time from character string.
您可以将 try_convert
与 cross apply
select StartDate,
Iif(x.v is null,0,1) ValidDate,
IsNull(Cast(v as varchar(20)),'Undefined Format')
from tBadDate
cross apply (values(Try_Convert(date,StartDate)))x(v)