Sql 查询日期时间更正
我有3列Sql 查询日期时间更正,sql,sql-server,date,Sql,Sql Server,Date,我有3列varchar(max)数据类型;这些列包含日期(即此格式的03/12/2004->) 这些列包含一些无效日期,即2004年2月30日的月份日期有问题 我使用了此查询,该查询将无效日期指定为0和有效日期1,但在获得0和1后,我无法更正这些日期。请告诉我如何纠正这些问题的解决方案。i、 e30/02/2003至01/03/2003 SET DATEFORMAT dmy SELECT Visit_Date, ISDATE(Visit_Date) as ValidDate FROM T
varchar(max)
数据类型;这些列包含日期(即此格式的03/12/2004
->)
30/02/2003
至01/03/2003
SET DATEFORMAT dmy
SELECT Visit_Date, ISDATE(Visit_Date) as ValidDate
FROM TABLE_NAME
datetime
type?(请记住,每列记录为250万)如果您确定哪些是错误的日期,哪些是正确的日期,您可以执行如下简单的
更新:
UPDATE TABLE_NAME
SET Visit_Date = IIF(Visit_Date = '30/02/2003', '01/03/2003', Visit_Date)
UPDATE TABLE_NAME
SET Visit_Date = CASE WHEN Visit_Date = '30/02/2003' THEN '01/03/2003' ELSE Visit_Date END
或者,如果您未使用SQL Server 2012
,则上述语句如下所示:
UPDATE TABLE_NAME
SET Visit_Date = IIF(Visit_Date = '30/02/2003', '01/03/2003', Visit_Date)
UPDATE TABLE_NAME
SET Visit_Date = CASE WHEN Visit_Date = '30/02/2003' THEN '01/03/2003' ELSE Visit_Date END
编辑:
您可以使用以下语句更正日期:
CREATE TABLE DataSource
(
[Date] VARCHAR(128)
)
INSERT INTO DataSource ([Date])
VALUES ('27/02/2003')
,('28/02/2003')
,('29/02/2003')
,('30/02/2003')
,('31/02/2003')
,('32/02/2003')
,('33/02/2003')
,('34/02/2003')
,('35/02/2003')
,('36/02/2003')
SELECT COALESCE(TRY_CONVERT(DATE,[Date])
,DATEADD(DAY
,CAST(SUBSTRING([Date],0,3) AS INT) - 1
,DATEADD(MONTH
,(SUBSTRING([Date],7,4) - 1900) * 12 + SUBSTRING([Date],4,2) - 1
,0)
)
)
FROM DataSource
基本上,它使用日期字符串中的年和月创建一个新日期。对于exmaple,如果Date
值为29/02/2003
,它将创建一个新的日期“2003-02-01”。之后,它使用函数将日期
值的天数添加到新日期,并让SQL Server自行计算新日期
上述查询的输出为:
这是一份完整的工作报告你有没有像2004年3月15日这样的日期?我的意思是,你确定格式是
DD/MM/yyyyy,而不是
MM/DD/YYYY`?不过,对于移动到正确的日期/时间/时间戳类型很好。我确信格式是DD/MM/YYYYTNX 4 ur reply…问题是,每列中有250万条记录(日期),,2003年2月30日->这是一种错误的日期,我在这里引用是为了更好地理解…其次,我使用的是SQL Server2008@usman_zufi这有用吗?或者您的情况很复杂,您需要使用其他技术?您的解决方案在某种程度上是特定的..我检查了大多数不正确的日期,所有日期都与2月有问题,,。我想知道,如果有29或30,它们都会更新到下一个正确的日期,同时保持日期的年份不变,,@usman_zufi你也可以检查这项新技术。它只是显示事情是如何工作的-您可以在update语句中实现它。“TRY\u CONVERT”不是可识别的内置函数名。,,查询出现此错误。。