0

我在asp中有一个应用程序。我将数据插入到 SQL Serverdatetime类型的列中。

让我为我的问题举一个例子:

当我有日期10/02/2012并将其插入 SQL Server 时,我会看到如下数据:

 2012-10-02

但我想这样:2012-02-10

当我有日期29/02/2012并将其插入 SQL Server 时,我会看到格式正确的数据: 2012-02-29

如何管理我想要的正确类型?

数据库和表的排序规则是 Greek_CI_AS ,用我的语言

任何想法如何解决它?

4

2 回答 2

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 和 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业务列来管理它。

以后,我能否请您在提出问题时提供更具体的示例,即您的表名、列名,这样我就不必继续发明这些了。

于 2012-02-13T22:23:27.207 回答
1

有几种可能性,但它们都与字符串通过的系统组件的日期格式设置有关(即,ASP 运行时和 SQL Server)。

SQL Server http://msdn.microsoft.com/en-us/library/ms189491.aspx中有日期格式设置

在 ASP 中,VBScript 中字符串的解析取决于解析期间有效的设置 - 基本上,http://support.microsoft.com/kb/306044

于 2012-02-10T19:50:20.270 回答