我有一个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()
但不使用硬编码值,为什么相同的数据类型转换查询也可以工作?
答案 0 :(得分:2)
您的第二个查询将日期值作为第二个参数。您的第一个查询那里只有一个字符串。
就SQL而言,该字符串看起来像日期的事实并不重要。
修改。 当您的列具有datetime类型时,请使用datetime值来传输数据。尝试并尽可能远离字符串。