我在asp中有一个应用程序。我将数据插入到SQL Server中的datetime
类型列。
让我举一个例子来说明我的问题:
当我有日期10/02/2012
并将其插入SQL Server时,我会看到如下数据:
2012-10-02
但我希望这样:2012-02-10
当我有日期29/02/2012
并将其插入SQL Server时,我会以正确的格式查看数据:2012-02-29
。
如何管理我想要的正确类型?
数据库和表的排序规则是Greek_CI_AS,用我的语言
任何想法如何解决?
答案 0 :(得分:1)
有一些可能性,但它们都与字符串传递的系统组件的日期格式设置有关(即ASP运行时和SQL Server)。
SQL Server http://msdn.microsoft.com/en-us/library/ms189491.aspx
中有一个日期格式设置在ASP中,VBScript中字符串的解析取决于解析期间有效的设置 - 基本上是http://support.microsoft.com/kb/306044
答案 1 :(得分:1)
您可以使用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
业务列来管理它。 / p>
将来,当您提出问题时,我可以请求您提供更具体的示例,即您的表名,列的名称,因此我不必继续发明这些。