我有 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
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'
等值执行三个步骤。
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