我的数据库中有几个表(带数据),格式为美国标准mm / dd / yyyy。有没有办法将日期转换为英国格式(即dd / mm / yyyy),并不涉及删除和重新创建表格?
谢谢!
答案 0 :(得分:4)
我在创建表格时将数据类型设置为>日期。我可以使用
mm/dd/yyyy
格式存储日期,但不能dd/mm/yyyy
。
正如我在评论中提到的,dates are not stored with their display format - 实际上,您可以说日期没有显示格式 - 只有日期的字符串表示具有显示格式。
每当处理表示SQL Server中日期和日期时间值的字符串文字时,请使用ISO 8601日期时间格式(yyyy-MM-ddTHH:mm:ss
或yyyyMMddTHHmmss
)。
SQL Server保证将此字符串表示正确解析为日期/日期时间值,而不会产生歧义。
请注意日期和时间之间的T
分隔符。有一个非常相似的标准格式,其中T
被替换为空格,但是the DateTime
data type have a bug parsing this format - 并且 依赖于文化(请注意{{1} }没有那个错误) - 这是另一个原因why you should never use datetime again.
当您使用像DateTime2
这样的字符串文字时,人们很容易看到它代表'25/03/2018'
,但SQL Server 会引发错误如果DATEFORMAT
的当前值不是March 25th 2018
,则尝试将此字符串解析为日期。
但是,SQL Server将始终正确解析日期的ISO 8601字符串表示形式,无论是否有任何本地设置或之前的DMY
或set dateformat
语句等等。 set language
将始终解析为'2018-02-01T15:40:50'
。
除非另有说明,正如Martin Smith在评论中所写的那样,默认February 1st 2018, 3:40:50 PM
取决于当前登录的defualt语言设置 - 因此适用于一次登录的查询可能会引发另一个登录错误 - 这是另一个很好的理由从不来信任特定于文化的日期时间字符串表示。
答案 1 :(得分:2)
您指的是SQL Server Management Studio或类似应用程序显示的日期格式吗?格式由Windows控制面板设置控制,而不是由SQL Server控制。 SQL Server中的日期没有内部格式。
答案 2 :(得分:0)
默认情况下,这是从运行MS SQL Server的计算机定义的。
要查看所有可用的文化,请执行以下操作:
select * from sys.syslanguages
然后,您可以使用以下命令更改SQL Server语言:
SET LANGUAGE BRITISH
...并且日期格式将始终如您所愿。
注意:这将更改所有数据库(不仅仅是日期格式),另一种方法是使用T-SQL中的FORMAT
函数更改日期格式。
答案 3 :(得分:0)
DECLARE @dt DATETIME = '01/20/2019';
SELECT FORMAT( @dt, 'd', 'en-gb' ) AS 'UK'