在Microsoft SQL Server 2005和.NET 2.0中,我想将当前日期转换为此格式的字符串:“YYYY-MM-DD”。例如,2009年12月12日将成为“2009-12-20”。我如何在SQL中执行此操作。
表定义中此SQL语句的上下文。换句话说,这是默认值。因此,当创建新记录时,当前日期的默认值将以上述格式存储为字符串。
我正在尝试: SELECT CONVERT(VARCHAR(10),GETDATE(),102)AS [YYYY.MM.DD]
但SQL服务器一直将其转换为: ('SELECT CONVERT(VARCHAR(10),GETDATE(),102)AS [YYYY.MM.DD]')
所以结果就是:
'SELECT CONVERT(VARCHAR(10),GETDATE(),102)AS [YYYY.MM.DD]'
以下是Visual Studio服务器资源管理器,表,表定义,属性显示内容的屏幕截图:
这些包装器位正在自动添加并将其全部转换为文字字符串:(N'')
这就是我尝试使用我之前使用的基本DATETIME之外的其他原因的原因:
这是我将所有内容挂钩到ASP.NET GridView并尝试通过网格视图进行更新时出现的错误:
2>'/'应用程序中的服务器错误。正在使用的SQL Server版本不支持数据类型“date”。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:正在使用的SQL Server版本不支持数据类型“date”。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[ArgumentException:正在使用的SQL Server版本不支持数据类型'date'。]
注意:我添加了一个相关问题,试图绕过SQL Server in use does not support datatype 'date' error,以便我可以按照建议使用DATETIME。
答案 0 :(得分:11)
http://www.sql-server-helper.com/tips/date-formats.aspx
有关所有日期时间格式的列表。
答案 1 :(得分:7)
CONVERT(CHAR(10), MyDateValue, 120)
但是,为什么不将日期存储为,呃,“日期”或“smalldatetime”? 并使用GETDATE()作为默认值
正确行事的理由
编辑:
您不使用SELECT作为默认值。您使用函数或常量。
来自CREATE TABLE:...DEFAULT constant_expression...
所以将CONVERT包装在UDF中。或者使用GETDATE()。
你为什么要使用102风格?
答案 2 :(得分:4)
如果您真的必须将您的日期存储为VARCHAR(实际上没有充分理由......),那么您必须在表定义中对此进行定义:
CREATE TABLE yourTable
(........,
TimestampString NVARCHAR(50) DEFAULT CONVERT(VARCHAR(50), GETDATE(), 102),
..........)
将AS [YYYY.MM.DD]
部分放在你的陈述中,你应该没事。
并请:日期字符串永远不会需要1024个字符!只要他们确实需要,就制作NVARCHAR字段....
但严重的是:我会总是将日期存储为DATETIME字段 - 如果您绝对需要字符串表示,为什么不为此添加计算字段:
ALTER TABLE YourTable
ADD TimestampString AS CONVERT(NVARCHAR(50), YourDateField, 102) PERSISTED
这样,您将获得一个新的计算字段“TimestampString”,它始终表示DATETIME字段的102样式VARCHAR表示,然后您可以在DATETIME字段上进行所有日期计算。