是否可以使用 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 将日期时间列便携式转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 js 字符串转换为日期以将其上传到 SQL 数据库?