【问题标题】:Substring and replace together?子串和替换一起?
【发布时间】:2014-08-04 08:00:53
【问题描述】:

我是 T-SQL 的新手。我想同时使用substringreplace,但它没有按预期工作, 或者可能有一些我不知道的额外功能。

我有一列存储日期时间,格式是这样的:'1393/03/03'。

但我想这样显示: '930303' ,即我希望省略这些字符 '13' 和 '/'。 我试过substringreplace 但它不起作用。

这是我的代码:

SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8)

你能帮帮我吗?

【问题讨论】:

  • 什么不起作用?错误是什么?
  • 参数数据类型 nvarchar 对子字符串函数的参数 3 无效。

标签: sql sql-server tsql substring


【解决方案1】:

您可以使用CONVERT 函数。

http://msdn.microsoft.com/en-us/library/ms187928.aspx

允许将日期从一种格式转换为另一种格式,在本例中为 111- JAPAN yyyy/mm/dd 到 12 - ISO yymmdd

SELECT convert(NVARCHAR(50), GETDATE(), 12)

SELECT convert(NVARCHAR(50), CAST('1393/03/03' AS DATE), 12)

【讨论】:

  • +1 以获得最佳答案:我正要输入这个:)
  • 是的,即使这不是公认的答案,我希望有人觉得它有用!
【解决方案2】:

试试这个:

SELECT REPLACE(SUBSTRING(CreateDate,2,8),'/','')

【讨论】:

    【解决方案3】:

    试试这个方法来测试我的解决方案:

    SELECT SUBSTRING(REPLACE('1393/03/03','/',null),3,8)
    

    您的专栏将是:

    SELECT SUBSTRING(REPLACE(CreateDate,'/',null),3,8)
    

    【讨论】:

      【解决方案4】:

      如果您输入列的数据类型是DATETIMEDATETIME2(或任何DATE/TIME 数据类型),那么您应该将其转换为VARCHAR,然后替换/ 字符。 (DATETIME format styles)

      如果它已经是一个字符串(VARCHAR),那么下面的解决方案就可以了。

      DECLARE @X DATETIME2 = '1393/03/03' -- Example for DATE/TIME data type
      DECLARE @Y VARCHAR(32) = '1393/03/03' -- Example for VARCHAR data type
      
      SELECT
          @X
          , @Y
          , REPLACE(CONVERT(VARCHAR(32), @X, 11), '/', '') -- Japan style
          , CONVERT(VARCHAR(32), @X, 12) -- ISO style
          , REPLACE(STUFF(@Y, 1, 2, ''), '/', '')
      

      编辑

      请注意,格式化不适用于数据库引擎,如果可能,请在前端应用程序中进行格式化。

      编辑 2 你的错误是:SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8)

      SUBSTRING 有 3 个参数:

      • expression(字符、二进制、文本、ntext 或图像)
      • start(大整数)
      • length(大整数)

      在您的查询中有 4 个参数,第三个是 VARCHAR 类型。使用您的解决方案,有效的表达式为:SUBSTRING(REPLACE(CreateDate, '/', ''), 3, 6)(如果 CreateDate 是 VARCHAR 或 NVARCHAR。如果是 DATETIME 或 DATETIME2,则应使用上述方法。)

      【讨论】:

        【解决方案5】:

        声明@STR VARCHAR(50) = '1393/03/03'

        SELECT SUBSTRING(REPLACE(@STR,'/',''),3,LEN(@STR))enter code here

        【讨论】:

          【解决方案6】:

          试试RIGHT函数

          SELECT RIGHT(REPLACE(CreateDate,'/',''),6)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-03
            • 1970-01-01
            • 2012-04-18
            • 1970-01-01
            • 1970-01-01
            • 2012-09-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多