Firebird 日期时间格式

问题描述 投票:0回答:1

我有 VTS 函数,可以将数据转换为日期时间。 我的目标是选择具有这种特定格式的日期时间

(MM-DD-YYYY HH:mm)

TIME列中的初始数据(Int64):

131473080013710000 131473080026060000 131473080039030000

使用

VTS(string) 函数进行转换 (select VTS("TIME"))



20170816000001.3710000 20170816000002.6060000 20170816000003.9030000

所需结果(YYYY-MM-DD HH:mm):

2017-08-16 00:00 2017-08-16 00:00 2017-08-16 00:00

我尝试过:

select VTS("TIME", 'YYYY-MM-DD HH:mm')

错误消息:
function VTS could not be matched

    

sql datetime firebird
1个回答
0
投票
据报道,VTS 函数返回文本数据(但是

CHARACTER SET NONE

 非常脆弱,将来可能会导致问题!),您现在可以使用字符串函数操作该文本,而无需查看该文本的含义。

请参阅字符串函数

http://www.firebirdtest.com/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-functions-scalarfuncs.html

不太清楚您引用的多种格式中您真正想要哪种。

选择具有此特定格式的日期时间 (

MM-DD-YYYY HH:mm)。 所需结果 (
YYYY-MM-DD HH:mm):

我们会坚持后者,因为您在问题中引用了两次。

下一个问题是您想从服务器获取文本还是日期。 假设您希望将格式化文本作为 SQL Server 输出,而不是本机日期值。

然后您需要使用

'20170816000001.3710000'

等值执行三个步骤。

    删除 YYYYMMDD 部分后面的所有数字。
  1. 用破折号分隔 DD、MM 和 YYYY 部分
  2. 将“00:00”附加到字符串中。
第1步:

select Left('20170816000001.3710000', 8) from rdb$Database "20170816"

第 2 步:

select Overlay( Overlay( Left('20170816000001.3710000', 8) PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) from rdb$Database "2017-08-16"

步骤3:

select Overlay( Overlay( Left('20170816000001.3710000', 8) PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) || ' 00:00' from rdb$Database "2017-08-16 00:00"

然而,在 SQL Server 级别将日期转换为文本通常是错误的想法。 通常,您从服务器返回纯日期值,并且您的

应用程序应该将该日期格式化为您选择的任何文本格式。

select cast( Overlay( Overlay( Left('20170816000001.3710000', 8) PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) as date ) from rdb$Database
    
© www.soinside.com 2019 - 2024. All rights reserved.