【问题标题】:Convert function SQL Server转换函数 SQL Server
【发布时间】:2018-07-20 22:45:54
【问题描述】:

我正在尝试将列的数据从 varchar(255) 转换为 Timestamp。

我查看了 Microsoft 文档,但它不起作用

代码:

SELECT 
    ["Data Nascimento"] 
FROM
    [leoninos] AS Original, 
    CONVERT(VARCHAR, ["Data Nascimento"]) AS VARCHAR, 
    CONVERT(timestamp(6, 4), ["Data Nascimento"]) AS timestamp;

错误:

消息 156,第 15 级,状态 1,第 53 行。
关键字“CONVERT”旁边的语法不正确。

什么是语法错误?

提前致谢。

【问题讨论】:

  • timestamp 不是日期时间列类型!类型名称timestamp 实际上是rowversion 的同义词,rowversion 是一种特殊的内置类型,其行为类似于序列号。我想你想要datetimedatetime2。 (在 SQL Server 2008 中,timestamp 名称已被正式弃用,以帮助防止这种混淆)。
  • 另外,您在查询的 FROM 块中有两个 CONVERT 语句 - 我假设这些确实应该在语句的 SELECT 部分中

标签: sql sql-server syntax type-conversion


【解决方案1】:

不要使用varchartimestamp 作为列别名。试试这个:

SELECT ["Data Nascimento"] as original
       TRY_CONVERT(varchar(255), ["Data Nascimento"]) AS type_varchar 
       -- TRY_CONVERT(timestamp(6, 4), ["Data Nascimento"]) AS type_timestamp
FROM [leoninos] ;

注意事项:

  • timestamp 不太合适。我不知道你想做什么。
  • FROM 子句位于SELECT 列表之后。
  • 不要使用 SQL 关键字作为列名(即使它们没有保留)。
  • 如果转换失败,请使用try_convert()

【讨论】:

    【解决方案2】:

    很难说你在做什么——但你似乎试图同时选择一个表和两个标量。尝试使用示例值自行执行 CONVERT 语句:

    SELECT CONVERT(int, '10'), CONVERT(date, '20180720')
    

    然后,一旦你让它适用于一些样本值,你就可以转换列值:

    CREATE TABLE #test (a NVARCHAR(max))
    INSERT INTO #test VALUES ('january 1 2018')
    INSERT INTO #test VALUES ('20180720')
    
    SELECT a, CONVERT(date, a) FROM #test
    DROP TABLE #test
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-14
      • 2014-11-11
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2015-12-25
      相关资源
      最近更新 更多