0

我们的用户以以下格式存储日期值:

Mon. DD, YYYY 

例子:

Sept. 23, 2013

注意周一之后的时期。

我们想将此格式转换为:

MM/dd/yyyy 

例子:

9/23/2013

我试过这个:

SELECT CONVERT(VARCHAR(10), TrainingDates, 101) AS TrainingDates
FROM tblTrainingDates

但我得到了Sept. 23

正如你所看到的,我不仅没有得到我想要的格式,年份部分甚至没有渲染

任何想法如何处理这个?

先感谢您。

4

2 回答 2

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)

作为一个函数。

于 2013-08-25T19:54:44.763 回答
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 类,它允许完全自定义格式。请注意 inAbbreviatedMonthNamesSep替换为Sept

当输入字符串的格式不正确时,可以使用它来避免异常ParseExactTryParseExact

于 2013-08-26T12:23:43.453 回答