Sql 查询日期时间更正

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

我有3列
varchar(max)
数据类型;这些列包含日期(即此格式的
03/12/2004
->)

  • 这些列包含一些无效日期,即2004年2月30日的月份日期有问题

    我使用了此查询,该查询将无效日期指定为0和有效日期1,但在获得0和1后,我无法更正这些日期。请告诉我如何纠正这些问题的解决方案。i、 e
    30/02/2003
    01/03/2003

    SET  DATEFORMAT dmy   
    SELECT Visit_Date, ISDATE(Visit_Date) as ValidDate
    FROM TABLE_NAME 
    
  • 在3列中更正这些日期之后,如何将列数据类型转换为
    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”不是可识别的内置函数名。,,查询出现此错误。。