我们的用户使用以下格式存储日期值:
Mon. DD, YYYY
示例:
Sept. 23, 2013
注意周一之后的时期。
我们想将此格式转换为:
MM/dd/yyyy
示例:
9/23/2013
我试过这个:
SELECT CONVERT(VARCHAR(10), TrainingDates, 101) AS TrainingDates
FROM tblTrainingDates
但我得到Sept. 23
,
正如你所看到的,我不仅没有得到我想要的格式,年份部分甚至没有渲染
有任何想法如何解决这个问题?
提前谢谢。
答案 0 :(得分:2)
这应该这样做:
SELECT CONVERT(DATETIME, REPLACE('Sept. 23, 2013','.',''), 107)
这会删除字符串中的点并转换为日期时间格式107.
然后返回你想要的字符串(MM / DD / YYYY):
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, REPLACE('Sept. 23, 2013','.',''), 107), 101)
有关其他格式类型,请参阅:http://www.sqlusa.com/bestpractices/datetimeconversion/和http://www.sql-server-helper.com/tips/date-formats.aspx
修改强>
事实证明它适用于我,因为斯洛文尼亚语的地方(9月)。这个应该在英语语言环境中工作:
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, SUBSTRING('Sept. 23, 2013', 0, 4) + ' ' + SUBSTRING('Sept. 23, 2013',6,9), 107), 101)
答案 1 :(得分:0)
可以在更新数据库之前完成日期解码
Dim inp As String = "Sept. 23, 2013"
Dim fi As Globalization.DateTimeFormatInfo
fi = New System.Globalization.DateTimeFormatInfo
fi.LongDatePattern = "MMM. dd, yyyy"
fi.AbbreviatedMonthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", ""}
Dim d As Date = DateTime.ParseExact(inp, "D", fi)
Dim result as String = d.ToString("MM\/dd\/yyyy")
关键是使用DateTimeFormatInfo Class,它允许完全自定义格式。请注意AbbreviatedMonthNames
9月取代 9月。
当输入字符串的格式不正确时,可以使用ParseExact
代替TryParseExact
来避免异常。