【问题标题】:SQL preparing a string for the smalldatetime convertionSQL 为 smalldatetime 转换准备字符串
【发布时间】:2018-04-07 12:37:55
【问题描述】:

我是 SQL 新手,我正在尝试操作一个字符串,稍后我将转换为 smalldatetime。

起始字符串为2017-9,日期时间格式应为yyyy-mm-dd hh:mm:ss

我知道如何转换它,也知道如何将-dd hh:mm:ss 添加到字符串中。
但是如何将9 更改为09?是否有任何特殊功能或者我应该编写一个脚本来检查号码是否已经有 2 位数字?你会给我什么建议?

【问题讨论】:

  • 这是什么rdbmssql-server?
  • 你想在什么时候把9变成09?在转换为日期时间之前?为什么?
  • Sql-Server 2014。
  • 在将其转换为日期时间之前是的

标签: sql sql-server tsql datetime type-conversion


【解决方案1】:

你可以试试下面SQL 脚本:

DECLARE @DATA VARCHAR(MAX);

SET @DATA = '2017-9';

SELECT CASE
           WHEN LEN(SUBSTRING(@DATA, 6, LEN(@DATA))) > 1
           THEN @DATA
           ELSE STUFF(@DATA, 6, 0, '0')
       END; 

结果:

2017-09

【讨论】:

  • 很抱歉没有清除它是哪个 DBMS。它是 SQL-Server 2014
  • 请再问一个问题。现在它在转换时失败了。错误:Conversion failed when converting character string to smalldatetime data type.,这是怎么回事?我没有任何线索。代码为:convert(smalldatetime, concat(CASE WHEN LEN(SUBSTRING(datum, 6, LEN(datum))) > 1 THEN datum ELSE STUFF(datum, 6, 0, '0') END, '-01 00:00:00'), 120)
  • @basilmonti wht 数据传入
  • @basilmonti 我认为你的 没有关于 '2017-09' 或 '2017-9' 的内容,或者可能传递了一些值,例如 '2017' 或什么都没有......这对于date-time 对话。
  • 我正在尝试将 2017-09-01 00:00:00 转换为 smalldatetime
【解决方案2】:

要在转换为日期时间之前获取它,请尝试以下操作:

SELECT CASE WHEN LEN (DateValue) = 6 THEN '0' + RIGHT (DateValue, 1) 
            WHEN LEN (DateValue) = 7 THEN RIGHT (DateValue, 2)  
       END AS Period

【讨论】:

    【解决方案3】:

    这是一个使用CONCAT, substring and LPAD 的示例,它可能会对您有所帮助:

    SELECT 
      CONCAT(
        substring('2017-9',1,5),
        LPAD(substring('2017-9',6,2),2,'0')
      )
    
    //Output: 2017-09
    
    
    SELECT 
      CONCAT(
        substring('2017-10',1,5),
        LPAD(substring('2017-10',6,2),2,'0')
      )
    //Output: 2017-10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2012-05-19
      • 2012-01-26
      相关资源
      最近更新 更多