Sql server 2012 SQL Server 2012-Convert(varchar,和#x27;2018-12-16 17:33:29和#x27;105)和#x2B'';Convert(varchar,';2018-12-16 17:33:29';108)未显示正确的数据

Sql server 2012 SQL Server 2012-Convert(varchar,和#x27;2018-12-16 17:33:29和#x27;105)和#x2B'';Convert(varchar,';2018-12-16 17:33:29';108)未显示正确的数据,sql-server-2012,data-conversion,getdate,Sql Server 2012,Data Conversion,Getdate,我有一个数据格式为“16-12-2018 17:33:29”(dd-mm-yyy-hh:mm:ss)的datetimedatatype列。因此,如果我获得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-1

我有一个数据格式为“16-12-2018 17:33:29”(dd-mm-yyy-hh:mm:ss)的
datetime
datatype列。因此,如果我获得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而言,该字符串看起来像一个日期这一事实并不重要

编辑
如果列具有datetime类型,则使用datetime值传输数据。尽量远离字符串。

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

编辑
如果列具有datetime类型,则使用datetime值传输数据。尽量避免使用字符串。

如果列具有datetime数据类型,则它没有特定的格式-您应该始终为您输入的任何
varchar
变量和参数提供长度use@marc_s,我已经修改了问题并尝试了查询,但在SSMS中得到了相同的结果。如果列具有datetime数据类型,则它没有特定的格式-您应该始终为您输入的任何
varchar
变量和参数提供长度use@marc_s,我已经修改了问题并尝试了查询,但在SSMS中得到了相同的结果。感谢您的回复。所以,如果我想使用硬编码的值来检查我的查询,我该如何检查<代码>选择转换(varchar(10),'2018-12-16 17:33:29',105)+''+转换(varchar(10),'2018-12-16 17:33:29',108)我理解你的观点。因为它是字符串值,所以不管我给它什么,它都会显示10个字符作为输出。我说的对吗?把varchar转换成varchar不会有任何作用。不要转换为varchar,而是转换为datetime。这应该会有帮助。谢谢你的回复。所以,如果我想使用硬编码的值来检查我的查询,我该如何检查<代码>选择转换(varchar(10),'2018-12-16 17:33:29',105)+''+转换(varchar(10),'2018-12-16 17:33:29',108)我理解你的观点。因为它是字符串值,所以不管我给它什么,它都会显示10个字符作为输出。我说的对吗?把varchar转换成varchar不会有任何作用。不要转换为varchar,而是转换为datetime。这应该会有帮助。