SQL 服务器 2012 - Convert(varchar,'2018-12-16 17:33:29',105) + ' ' Convert(varchar,'2018-12-16 17:33:29',108) 是没有显示正确的数据

SQL Server 2012 - Convert(varchar,'2018-12-16 17:33:29',105) + ' ' Convert(varchar,'2018-12-16 17:33:29',108) is not showing correct data

我有一个 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() 而不是硬编码值,为什么相同的数据类型转换查询有效?

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

编辑。 当您的列具有日期时间类型时,请使用日期时间值来传输数据。尽量远离字符串。