是否可以使用 SQL 将日期时间列便携式转换为字符串

Posted

技术标签:

【中文标题】是否可以使用 SQL 将日期时间列便携式转换为字符串【英文标题】:Is there a portable conversion of a datetime column to string using SQL 【发布时间】:2019-01-03 15:16:13 【问题描述】:

我在 sybase 中有一个定义为日期时间的列,并已使用将其转换为字符串

ISNULL(CAST(CAST(most_recent_trades.asof_date AS DATE) AS VARCHAR(20))

事实证明,这个在 sybase 中作为字符串的表示形式与我的单元测试数据库 H2 不同。

In sybase
Sep  1 2016

In H2
2016-09-01

该列在 H2 中也被定义为日期时间。

有没有办法将日期时间列转换为在 Sybase 和 H2 中具有相同字符串表示形式的字符串(如果有帮助,我不需要时间部分)?

编辑: 我认为没有任何方法可以通过一个函数以可移植的方式做到这一点,所以我决定使用 YEAR、MONTH 和 DAY 函数(它们都在 Sybase 和 H2 中可用),提取部件并将它们连接起来以生成在 Sybase 和 H2 中表示为字符串时看起来相同的日期。目前这对我有用。

【问题讨论】:

您可以在 Sybase 中使用convert() 来选择您想要的格式。我认为这可以解决您的问题。 convert有两个问题:1.H2和Sybase的params顺序不同,2.结果和CAST一样 通常您会使用 ISO 格式。在这种情况下是2016-09-01(使用H2的那个)。 【参考方案1】:

我会使用CONVERT() 函数的121 格式,然后获取它的日期部分,如下所示:

substring(convert(varchar(30), most_recent_trades.asof_date, 121), 1, 10)

【讨论】:

这甚至在 H2 中都行不通。如果我没有与生产数据库不同的单元测试数据库,我就不会问这个问题! 此代码在 Sybase 中工作以生成 ISO 格式的日期。默认情况下,H2 已经为您提供了 ISO 格式。 这是生产代码。根据我是在运行单元测试还是在生产环境中运行,我不能在生产代码中做不同的事情。 为什么你会在单元测试和生产环境中使用不同的 RDBMS?你在无偿创造工作。考虑改用 SAP ASE 开发人员版 - sap.com/cmp/syb/crm-xu15-int-asewindm/index.html

以上是关于是否可以使用 SQL 将日期时间列便携式转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQL Server 的时间戳列转换为日期时间格式

SQL将日期时间转换为日期名称

是否可以将 js 字符串转换为日期以将其上传到 SQL 数据库?

使用 SQL 将字符串列转换为 mongodb 中的日期时间

sql字符串转换日期

SQL表将日期列转换为纪元