更新表错误使用转换函数在SQL Server 2005中

时间:2012-09-07 07:30:34

标签: sql sql-server-2005

我有一个包含两列的表,所有这些都是日期时间值 例如,A列值为'07 / 09/2012 14:13:34' 现在,我想通过语句

将列A更新为yyyymmdd
 Update Change_Date
    SET A = CONVERT(VARCHAR(8),A,112)

它在我的表Change_Date中显示了succsessful消息但没有效果(20120907没有更新值)。

任何帮助都会受到重视,谢谢!

3 个答案:

答案 0 :(得分:1)

日期时间字段可以保存日期时间。您的日期时间是您用于检查数据的工具的结果,无论是Management Studio,还是您自己从数据库打印内容的软件。

我强烈建议将其保留为日期时间字段。这将允许您执行与日期相关的操作,例如减法和比较。如果您想更改用户查看日期的方式,请在表示层设置日期格式。

您发布的代码中发生的事情是您将A的值设置为它已经存在的相同日期。您通过另一种格式的字符串设置该值的事实没有关系,SQL服务器将始终必须将您的字符串输入解析为它可以理解的日期。这就是您没有收到错误消息的原因。该操作正在运行,只是它没有改变任何东西。

答案 1 :(得分:0)

这是因为该列的数据类型为DATEDATETIME,并且具有特定格式。如果要使用特定格式更新列,请创建另一列并使其数据类型为VARCHAR。我相信112格式为yyyymmdd

我强烈建议您保持原样。数据库是数据的存储,不用于查看目的。如果您的数据类型为DATETIMEDATE,则可以轻松执行日期任务。例如,如果您想要检索具有特定格式的日期,那就是您转换日期的时间。

希望这是有道理的。

enter image description here

答案 2 :(得分:0)

您可以选择指定格式的日期列,也可以创建一个以yyyymmdd格式选择列值的视图:

SELECT CONVERT(VARCHAR(8), A, 112) FROM Change_Date