我需要将DateTime变量中的值转换为yyyy-mm-dd格式的varchar变量(没有时间部分)。
我怎么做呢?
我需要将DateTime变量中的值转换为yyyy-mm-dd格式的varchar变量(没有时间部分)。
我怎么做呢?
当前回答
CONVERT(VARCHAR, GETDATE(), 23)
其他回答
OP提到了datetime格式。对我来说,时间成了绊脚石。 我认为在格式化之前删除时间部分(通过强制转换datetime到date)会更简洁一些。
convert( varchar(10), convert( date, @yourDate ) , 111 )
你没有说什么语言,但我假设是c# /。NET,因为它具有原生DateTime数据类型。在这种情况下,只需使用ToString方法进行转换,并使用如下格式说明符:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
但是,我要警告不要在数据库查询中使用它或连接到SQL语句中。数据库需要使用特定的格式化字符串。如果您想要完成这个任务,最好将时间部分归零,并使用DateTime作为SQL参数。
写一个函数
CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
DECLARE @ret VARCHAR(14)
SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
RETURN @ret
END
SQL Server 2012有一个新函数,FORMAT: http://msdn.microsoft.com/en-us/library/ee634924.aspx
并且您可以使用自定义日期时间格式字符串:http://msdn.microsoft.com/en-us/library/ee634398.aspx
这些页面暗示它也可以在SQL2008R2上使用,但是我没有一个方便的页面来测试这种情况。
示例用法(Australian datetime):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
结果是05/05/2020 10:41:05 AM