SQL Server 2012-Convert(varchar,'2018-12-16 17:33:29',105)+''Convert(varchar,'2018-12-16 17:33:29',108)未显示正确的数据

时间:2018-12-16 12:18:01

标签: sql-server-2012 data-conversion getdate

我有一个datetime数据类型列,其数据格式为'16 -12-2018 17:33:29'(dd-mm-yyyy hh:mm:ss)。因此,如果我获得的输入数据为2018-12-16 17:33:29,则需要将数据转换为“ 16-12-2018 17:33:29”。

这是我一直在尝试的数据类型转换,

SELECT 
    CONVERT(VARCHAR(10), '2018-12-16 17:33:29', 105) + ' ' +
    CONVERT(VARCHAR(10), '2018-12-16 17:33:29', 108)

输出为:2018-12-16 2018-12-16

但是,如果我使用Getdate()而不是硬编码值,则会得到预期的数据格式:

SELECT 
    CONVERT(VARCHAR(10), GETDATE(), 105) + ' '  + 
    CONVERT(VARCHAR(10), GETDATE(), 108)

输出为:16-12-2018 17:36:18

我的问题是,如果我们使用getdate()但不使用硬编码值,为什么相同的数据类型转换查询也可以工作?

enter image description here

1 个答案:

答案 0 :(得分:2)

您的第二个查询将日期值作为第二个参数。您的第一个查询那里只有一个字符串。
就SQL而言,该字符串看起来像日期的事实并不重要。

修改。 当您的列具有datetime类型时,请使用datetime值来传输数据。尝试并尽可能远离字符串。