SQL Server中与MySQL DATE_FORMAT()等效的函数是什么?

4
希望您今天过得愉快,准备好迎接圣诞节了。
我有一个快速的问题。我正在将一个MySQL函数转换为SQL Server,我已经将大部分函数转换完成,只有一个部分还没有转换,其中包含以下内容:
@description = CONCAT(@description, date_format(@INLastUpdated, '%H:%i %d %b %Y'))

我想做的是基本上重新创建date_format function以按指定方式格式化日期,但我不确定如何做。从我在MySQL文档中看到的内容来看,所选格式将给出小时:分钟日/短月份名称/年份。 有人有什么想法吗?

4
一个想法:在显示中格式化日期,而不是在数据库中格式化! - Jamiec
我很想这样做,但公司不愿意改变连接数据库的应用程序,他们希望功能保持不变。因此,格式化必须在数据库端完成。 - denimknight
在SQL Server中,Cast和Convert可以完成转换的任务。 - Gustav Klimt
虽然你已经接受了一个答案,但如果你提到了你的SQL Server版本,那将会很有帮助:SQL Server 2012拥有FORMAT()函数,它可以完全满足你的需求。 - Pondlife
3个回答

2
你可以尝试这个方法:
DECLARE @description VARCHAR(1000) = 'test'
DECLARE @INLastUpdated DATETIME = '2012-12-21 14:32:22'
SET @description = @description + ' ' 
    + LEFT(CONVERT(VARCHAR(8), @INLastUpdated, 8), 5) + ' ' 
    + CONVERT(VARCHAR(20), @INLastUpdated, 106)

SELECT @description

但是要注意,格式106取决于本地语言设置。在MSDN上阅读更多相关信息。


1

相应的函数是CONVERT。但你基本上没有什么办法。SQL Server不允许挑选日期标记。你需要浏览可用的完整日期内置格式并选择一个,或尝试通过字符串连接来组合输出,例如:

CONVERT(VARCHAR, CURRENT_TIMESTAMP, 103) + ' ' + CONVERT(VARCHAR(8), CURRENT_TIMESTAMP, 114)

0

使用哪个版本的SQL Server?在SQL Server 2012中,我们现在拥有FORMAT函数。

这在MySQL中是这样的

date_format(@INLastUpdated, '%H:%i %d %b %Y')

使用 FORMAT 函数,这个在 SQL Server 2012 中会被翻译成类似如下的内容:

DECLARE @d DATETIME = GETDATE();
SELECT  FORMAT(@d, 'HH:mm d MMM yyyy', 'en-US') AS 'DateTime Result';

BOL SQL Server 2012 > FORMAT (Transact-SQL)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接