Sql Firebird日期时间格式

Sql Firebird日期时间格式,sql,datetime,firebird,Sql,Datetime,Firebird,我有VTS函数,可以将数据转换为日期时间。 我的目标是选择此特定格式的日期时间(MM-DD-YYYY HH:MM) 时间列(Int64)中的初始数据: 使用VTS(字符串)功能(选择VTS(“时间”)) 所需结果(YYYY-MM-DD HH:MM): 我试过:选择VTS(“时间”,“YYYY-MM-DD HH:MM”) ErrorMessage:函数VTS无法匹配,因为据报道VTS函数返回文本数据(但字符集NONE非常脆弱,将来可能会导致问题!)您现在可以使用字符串函数操作该文本,而无需查看该文

我有VTS函数,可以将数据转换为日期时间。 我的目标是选择此特定格式的日期时间
(MM-DD-YYYY HH:MM)

时间列(Int64)中的初始数据:

使用VTS(字符串)功能
(选择VTS(“时间”))

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

我试过:
选择VTS(“时间”,“YYYY-MM-DD HH:MM”)


ErrorMessage:
函数VTS无法匹配

,因为据报道VTS函数返回文本数据(但
字符集NONE
非常脆弱,将来可能会导致问题!)您现在可以使用字符串函数操作该文本,而无需查看该文本的含义

请参见第页的字符串函数

您引用的许多格式中,您真正想要的是哪种格式还不太清楚

选择此特定格式的日期时间(MM-DD-YYYYHH:MM)。
所需结果(YYYY-MM-DDHH:MM):

我们将坚持后者,因为你在问题中引用了两次

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

然后需要对值执行三个步骤,如
'20170816000001.3710000'

  • 删除YYYYMMDD部分之后的所有数字
  • 用破折号分隔DD、MM和YYYY部分
  • 将“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"
    
    然而,在SQLServer级别将日期转换为文本通常是错误的。 通常,您从服务器返回纯日期值,并且是您的应用程序将该日期格式化为您选择的任何文本格式

    select cast(
      Overlay( Overlay(
         Left('20170816000001.3710000', 8)
         PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) 
      as date )
    from rdb$Database
    

    由于据报道VTS函数返回文本数据(但是
    字符集NONE
    非常脆弱,将来可能会导致问题!),因此您现在可以使用字符串函数处理该文本,而无需查看该文本的含义

    请参见第页的字符串函数

    您引用的许多格式中,您真正想要的是哪种格式还不太清楚

    选择此特定格式的日期时间(MM-DD-YYYYHH:MM)。
    所需结果(YYYY-MM-DDHH:MM):

    我们将坚持后者,因为你在问题中引用了两次

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

    然后需要对值执行三个步骤,如
    '20170816000001.3710000'

  • 删除YYYYMMDD部分之后的所有数字
  • 用破折号分隔DD、MM和YYYY部分
  • 将“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"
    
    然而,在SQLServer级别将日期转换为文本通常是错误的。 通常,您从服务器返回纯日期值,并且是您的应用程序将该日期格式化为您选择的任何文本格式

    select cast(
      Overlay( Overlay(
         Left('20170816000001.3710000', 8)
         PLACING '-' FROM 7 FOR 0) PLACING '-' FROM 5 FOR 0) 
      as date )
    from rdb$Database
    

    什么是“VTS功能”?无论如何,格式化值最好由客户端完成,而不是在SQL语句中。
    选择VTS(“时间”,“YYYY-MM-DD HH:MM”)
    -这不是真正的查询,它不包含“from”子句。或者您不使用Firebird SQL server,而是使用一些不同的非Firebird数据库
    特定格式(MM-DD-YYYY
    所需结果(YYYY-MM-DD
    )-那么您需要什么格式?您需要格式化的字符串输出还是日期输出?VTS其外部函数:声明外部函数VTS BIGINT返回CSTRING(128)字符集NONE FREE_如果我知道查询没有满,我只放了我需要的部分,当然后面还有表中的部分。已经编写的格式是“yyy-MM-DD HH:MM”。
    CHARACTER SET NONE
    在将来的维护中自找麻烦……您编写了两种不同的日期格式,我引用了这两种格式“VTS函数”?无论如何,格式化值最好由客户端完成,而不是在SQL语句中。
    选择VTS(“时间”,“YYYY-MM-DD HH:MM”)
    -这不是真正的查询,它不包含“from”子句。或者您不使用Firebird SQL server,而是使用一些不同的非Firebird数据库
    特定格式(MM-DD-YYYYY
    所需结果(YYYY-MM-DD
    -那么您需要什么格式?您需要格式化的字符串输出还是日期输出?VTS其外部函数:声明外部函数VTS BIGINT返回CSTRING(128)字符集NONE FREE\u我知道查询没有满,我只放了我需要的部分,当然后面还有表中的部分。已经编写的格式是“YYYY-MM-DD HH:MM”。
    CHARACTER SET NONE
    在将来的维护中自找麻烦……您编写了两种不同的日期格式,我引用了两种格式反馈。datetime格式顺序不太重要,如果我有YYYYMMDD解决方案,我可以轻松地转换为DDMMYYYY。另一件事是,您正在使用上面我给您的数字,但这些只是示例,我不打算对数千条检索到的记录执行相同的操作。我需要以某种方式使用“选择VTS(“时间”)将结果转换为日期时间YYYY-MM-DD HH:MM:ss。将常量替换为VTS函数调用。这是编程的ABC,每个人都知道,因此我不突出显示它。我将逐步向您展示如何将字符串从停止的位置转换为要到达的位置。此外,我建议您使用last选项,从服务器获取未格式化的非字符串本机日期值,然后使用您的应用程序将日期值格式化为您可能喜欢的任何文本表示形式。感谢您的反馈。日期时间格式顺序并不那么重要,如果我有YYMMDD解决方案,我可以轻松转换为DDMMYYYY。另一件事是您正在工作用我给你的数字在上面打电话,但是