您可以使用CONVERT()
控制日期格式,你可以指定一个小目标串裁剪结果:
SELECT CONVERT(NVARCHAR(10), GETDATE(), 21) -- YYYY-MM-DD
SELECT CONVERT(NVARCHAR(10), GETDATE(), 102) -- YYYY.MM.DD
SELECT CONVERT(NVARCHAR(10), GETDATE(), 105) -- DD-MM-YYYY
SELECT CONVERT(NVARCHAR(10), GETDATE(), 110) -- MM-DD-YYYY
SELECT CONVERT(NVARCHAR(5), GETDATE(), 105) -- DD-MM
SELECT CONVERT(NVARCHAR(5), GETDATE(), 110) -- MM-DD
SELECT CONVERT(NVARCHAR(4), GETDATE(), 102) -- YYYY
-- To get YYYY-DD-MM, put two of the above together:
SELECT CONVERT(NVARCHAR(4), GETDATE(), 102)
+ '-' + CONVERT(NVARCHAR(5), GETDATE(), 105)
要强制插入日期格式,你可以做类似的事情:
-- Insert in Italian dd-mm-yy (e.g. 10th February 2012)
INSERT INTO user_table VALUES (CONVERT(DATETIME, '10-02-12', 5));
-- Insert in USA mm-dd-yy (2nd October 2012)
INSERT INTO user_table VALUES (CONVERT(DATETIME, '10-02-12', 10));
请参阅Microsoft MSDN参考CAST and CONVERT (Transact-SQL)。
----回答另一个问题----
我发现你最近的评论有点暧昧。如果你问如何您在字符串格式有两个日期之间的一个datetime
场进行搜索,然后,尝试这样的:
SELECT *
FROM user_table
WHERE mydate BETWEEN convert(Datetime,'20/02/2012',103)
AND convert(Datetime,'01/03/2012')
,而如果你想有两个上nvarchar
字段搜索字符串格式的日期,然后,尝试像这样:
SELECT *
FROM user_table
WHERE convert(Datetime, mynvarchar, 103)
BETWEEN convert(Datetime,'20/02/2012',103)
AND convert(Datetime,'01/03/2012')
但是,这是非常低效率。如果您要进行日期搜索,我强烈建议以日期时间格式存储日期字段。如果你有一个业务需求存储nvarchar的版本,那也没关系,但你可以使用动态列,如:
CREATE TABLE user_table
(
mynvarchar NVARCHAR(10), -- Date as a String in DD/MM/YYYY format
mydatetime AS CONVERT(DATETIME, mynvarchar, 103) PERSISTED
);
该方案的优点是mydatetime
场自动更新,并且可以在索引使用,如果你想要,你可以通过操作mynvarchar
业务栏来管理它。
未来,我可以请求您提问时,您提供了更具体的例子,即您的表名,列名,所以我不必一直发明这些。
代码看起来像做什么插入?此外 - 要检查它是否是显示格式问题,您可以执行一些DATEPART调用来查看日/月以查看它是否正确存储。 – RQDQ 2012-02-10 19:49:42
我通常只使用VBScript'FormateDateTime()',但它不会出来你想要它,只是一个想法。 – 2012-02-11 05:47:20