【问题标题】:Date Formatting, SQL Server日期格式,SQL Server
【发布时间】:2015-05-12 13:48:30
【问题描述】:

我的最终公式有问题:

ALTER TABLE tempTestProject 
ADD [T12 Backdated jnls]  varchar(50)

update tempTestProject
set [T12 Backdated jnls] = 'X' where cast([Created Date] as date) > cast([Effective Date] as date) 

我得到错误:

从字符转换日期和/或时间时转换失败 字符串。

现在,在进行上述操作之前,我必须重新安排我的日期,因为我在处理之前的日期时遇到了问题。我执行了以下操作以将我的日期转换为所需的格式:(请记住我的日期是 varchar (50),最初的格式是 18/01/2014)

ALTER TABLE tempTestProject 
ADD [Created Date]  varchar(50)

update tempTestProject
set [Created Date] = (RIGHT(["Created Date"],4) + '/' + SUBSTRING(["Created Date"],4,2) + '/'+ LEFT(["Created Date"],2))

ALTER TABLE tempTestProject 
ADD [Effective Date]  varchar(50)

update tempTestProject
set [Effective Date] = (RIGHT(["Effective Date"],4) + '/' + SUBSTRING(["Effective Date"],4,2) + '/'+ LEFT(["Effective Date"],2))

希望我解释得足够清楚,感谢您的帮助!

【问题讨论】:

  • 你看到这个问题了吗? stackoverflow.com/questions/207190/…
  • 不要将日期存储在字符串中,这是荒谬的。从您发布的内容来看,这是行不通的,因为您的新列中的所有值都是 NULL。
  • 1) 在数据库中存储日期、时间或日期和时间值时,请使用其中一种日期时间数据类型。
  • 2) 切勿创建名称包含嵌入空格的 SQL 对象(例如表或列)。
  • 3) 以上两条规则没有例外。

标签: sql sql-server date casting format


【解决方案1】:

如果您无法在 cmets 中实现所有好的建议,您可以使用 ISDATE 测试是否可以将字符串转换为日期来解决此问题。 编辑: 刚刚注意到你是如何存储你的日期的。在使用 is date 之前,执行这一行:

SET DATEFORMAT DMY;

select
case when ISDATE([CREATED DATE]) = 1
  then cast([CREATED DATE] as date)
else null
end as <Your date name here>

【讨论】:

    猜你喜欢
    • 2010-12-14
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多