【问题标题】:Insert character into SQL string将字符插入 SQL 字符串
【发布时间】:2013-06-22 10:44:51
【问题描述】:

我有一个 nvarchar 列,我需要在字符串的固定点插入一个连字符。连字符需要在最右边的字符和下一个字符之间,并再次在右边的第三个位置,例如: 列值为

0000050704 

我需要它是

0000050-70-4

或值为

0555256321 

应该是

0555256-32-1

看不出这是怎么做到的。谁能给我一点帮助?

【问题讨论】:

  • 如果是 SQL Server,STUFF() 就是为了这个...

标签: sql insert-update


【解决方案1】:

假设字符串可以是可变长度的,您需要在表达式中使用 REVERSE() 或许多看起来很讨厌的 LEN() 值。

declare @txt varchar(100) = '0000050704'

--If using SQL Server, the STUFF() function is your friend
select REVERSE(STUFF(STUFF(REVERSE(@txt), 2, 0, '-'), 5, 0, '-'))

--if not you'll need to concatenate SUBSTRING()s
select REVERSE(SUBSTRING(REVERSE(@txt), 1, 1) + '-' + SUBSTRING(REVERSE(@txt),2, 2) + '-' + SUBSTRING(REVERSE(@txt),4, LEN(@txt)))

【讨论】:

    【解决方案2】:

    您可以使用这个简单的功能:

    CREATE FUNCTION [dbo].[SetHyphen] (@S varchar(50)) RETURNS varchar(52)
    BEGIN
    RETURN STUFF(STUFF(@S,LEN(@S)-2,0,'-'),LEN(@S)+1,0,'-')
    END
    

    例如:

    select [dbo].[SetHyphen]('0000050704')
    0000050-70-4
    

    【讨论】:

      【解决方案3】:

      这取决于您的 SQL 服务器。请查看有关如何操作字符串的文档 - 我会假设 SUBSTRING 函数。

      在 MS SQL Server 中你可以做某事。像这样:

      UPDATE YourTableName SET 
          YourFieldName = 
              SUBSTRING(YourFieldName, 1,7) + "-" + 
              SUBSTRING(YourFieldName, 7,2) + "-" +
              SUBSTRING(YourFieldName, 9,1)
      

      这会将您的字段内容分成三部分并用分隔符重建它...

      在运行查询之前,我建议您将其作为普通 SELECT 进行尝试,看看它是否按需要工作:

      SELECT
          SUBSTRING(YourFieldName, 1,7) + "-" + 
          SUBSTRING(YourFieldName, 7,2) + "-" +
          SUBSTRING(YourFieldName, 9,1)
      FROM YourTableName
      

      注意查询没有 WHERE 条件,因此会影响表的所有行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多