【发布时间】:2021-11-10 12:10:26
【问题描述】:
我有一个 csv 文件,我使用 SSIS 将其插入到数据库中,该文件包含格式为 MM / DD / YYYY hh: ss: mmm Am / Pm 的日期,我将其插入到 varchar 中,因为如果我对日期进行转换,它会使它们变形。这是我的数据:
| ARRIVAL_DATE_TIME |
|---|
| 9/25/2021 11:40:32 AM |
| 9/25/2021 11:41:46 AM |
| 9/25/2021 11:55:35 AM |
| 9/25/2021 11:56:15 AM |
| 9/25/2021 11:56:37 AM |
| 9/25/2021 11:56:48 AM |
| 9/25/2021 12:12:25 PM |
| 10/8/2021 8:05:12 AM |
| 10/8/2021 8:11:05 AM |
我想按顺序显示我的日期,我的日期在 2021 年 9 月 25 日到 2021 年 10 月 19 日之间, 我在sql server下写这个sql代码:
SELECT
convert(varchar, [ARRIVAL_DATE_TIME], 9) a
FROM [MAKS].[dbo].[Masks] order by a
但显示的结果不好,它混淆了几天和几个月。这就是我得到的
| a |
|---|
| 10/1/2021 1:00:00 AM |
| 10/1/2021 1:00:06 PM |
| 10/1/2021 1:00:31 AM |
| 10/1/2021 1:00:52 AM |
| 10/1/2021 1:01:06 PM |
| 9/26/2021 9:16:41 AM |
| 9/26/2021 9:19:43 AM |
| 9/26/2021 9:18:28 AM |
| 9/26/2021 9:16:57 AM |
大家有什么想法
【问题讨论】:
-
如果你看documentation风格
9就是mon dd yyyy hh:mi:ss:mmmAM (or PM)。 -
日期没有格式。
if I do a transformation in date it deforms them.不,它没有。日期没有格式,它们是二进制值。不要使用这样的代码。美国以外几乎没有人使用美国格式。格式仅适用于将字符串解析为日期值或将日期值格式化为字符串时。如果您希望日期以某种方式显示,请确保在显示日期时正确格式化它,而不是在数据库中 -
所以你的日期作为varchar存储在数据库中?那么你的问题就在那里。使用 Date、DateTime2 或 DateTimeOffset 来存储日期时间值,在插入时从它们的字符串表示中解析它们(使用转换)并在选择时将它们显示为字符串(再次使用转换)。然后,您可以正确订购它们,以及其他所有好处。
-
日期如何显示完全取决于客户。 SSMS 只是一个客户端应用程序。 Web 应用程序或桌面应用程序也是如此。这些客户端应用程序如何显示日期完全取决于它们,尽管默认是使用当前用户的区域设置
-
使用样式将
varchar转换为varchar没有任何效果。样式代码用于将(n)(var)char转换为 不同 数据类型或从 不同 数据类型转换。如果两个参数都或都不是(n)(var)char,则该参数将被有效忽略。
标签: sql sql-server datetime ssis