sql - 转换日期时间的意外结果
问题描述
我试图将日期格式化为 01/01/2012 6:10:00 PM,但我不断收到 2012-01-01 18:10:00.000,Microsoft 手册建议我使用格式 103 以我的理解。103 = 日/月/年
这就是我所拥有的
SELECT convert(datetime,'01-01-2012 6:10:00 PM',103)
我在这里做错了什么?
解决方案
转换为日期时间时,样式(在您的情况下103
)指示正在接收的字符串的格式,即SELECT CONVERT(DATE, '01/02/2012', 103)
,将被解释为 2 月 1 日,而不是 1 月 2 日。此转换的输出将是类型DATETIME
,并且日期没有隐式格式,它们可以用不同格式的字符串表示,但日期时间本身没有。因此,您首先需要使用基于输入的样式(105:dd-mm-yyyy
或 110 :)将字符串转换为日期时间mm-dd-yyyy
,然后使用您要输出的样式(103)将其转换回字符串:
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '01-02-2012 6:10:00 PM', 105), 103),
CONVERT(VARCHAR(10), CONVERT(DATETIME, '01-02-2012 6:10:00 PM', 110), 103)
如果您的输入是一个常量格式的字符串,并且始终有效,并且您想输出一个字符串,那么您可能会发现简单的字符串操作最适合您。例如
SELECT REPLACE(LEFT('01-02-2012 6:10:00 PM', 10), '-', '/')
给出:
01/02/2012
这没有转换的开销,所以应该更快(我没有测试过这是否很重要),也没有潜在的错误,但这可能不是你想要的。
推荐阅读
- plsql - PL/SQL:我不知道如何正确地将数据插入到 2 列对象类型的嵌套表中。错误:“没有足够的值”
- python - 根据另一个 DataFrame 中的最近位置填充 Pandas DataFrame 中的缺失值
- javascript - Google 文档插件 - 通过侧边栏按钮设置文本的 setSelection() - 如何使其成为活动选择?
- php - 无法连接 docker 上的 MySql 数据库
- php - 使用 mpdf 时无法识别样式
- javascript - 如何检查 jquery.each 循环中正在运行的计时器
- linux - 如何在删除 appimage 文件之后或之前删除 appimage 的用户修改设置?
- linkedin-api - 访问权限不足:GET-owners /shares 问题
- java - PDFBox 跳过文本
- excel - Excel IF公式设置最大值和最小值