为什么我在SQL-Server 2008上执行此操作:
EXEC sp_configure 'default language', 5
reconfigure
日期格式为dd / mm / yyyy:
select * from sys.syslanguages where langid = 5
返回
dateformat
----------
dmy
所以如果我这样做
select GETDATE()
我正在等待:
(no column name)
----------------
31/08/2013 13:20:44.590
但我明白了:
(no column name)
----------------
2013-08-31 13:20:44.590
我正在使用SQL-Server 2008 Express兼容模式100
我真正的问题是我需要在dd / mm / yyyy hh:mm到DATETIME变量中传递存储过程日期,但解析器仍在等待yyyy-mm-dd,尽管我更改了默认语言。
谢谢
答案 0 :(得分:1)
以下将由Management Studio呈现,无论服务器设置如何:
SELECT GETDATE();
这会将datetime值返回给客户端应用程序,而不是A STRING。如果需要字符串,可以显式转换为特定样式:
对于存储过程的输入,请请传递正确的日期时间参数而不是字符串。当你真的不知道他们是在9月6日还是6月9日时,没有理由允许用户输入像2013年6月9日这样的自由文本。传递给SQL Server的安全格式是:
YYYYMMDD HH:MM:SS.nnn
YYYY-MM-DDTHH:MM:SS.nnn
其他任何东西都可能被误解。这就是为什么除了在演示/显示的最后一步之外,你不应该把它们作为字符串处理。
答案 1 :(得分:0)
你可以像这样使用
Select CONVERT(varchar(100), GETDATE(),103)+' '
+CONVERT(varchar(100), GETDATE(),108) as now
结果为