仅当字符串 > 特定长度时,才将字符添加到字符串的特定位置

Posted

技术标签:

【中文标题】仅当字符串 > 特定长度时,才将字符添加到字符串的特定位置【英文标题】:Add a character to a specific position of a string only if the string is > a particular length 【发布时间】:2021-05-04 16:13:20 【问题描述】:

我的平板电脑有一列数据如下所示:

A785
B21423
21432
031258A
358
Z94

我想添加一个“。”仅当原始字符串有 4 个或更多字符时才作为第 4 个字符,这将导致:

A78.5
B21.423
214.32
031.258A
358
Z94

我在 SQL Server Management Studio 18 中执行此操作

谢谢

【问题讨论】:

【参考方案1】:

我建议:

select (case when len(str) >= 4
             then stuff(str, 4, 0, '.')
             else str
        end)

【讨论】:

【参考方案2】:

请尝试以下解决方案。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, token VARCHAR(30));
INSERT INTO @tbl (token) VALUES
('A785'),
('B21423'),
('21432'),
('031258A'),
('358'),
('Z94');
-- DDL and sample data population, end

SELECT *
    , IIF(size > 3, CONCAT(LEFT(token, 3), '.', RIGHT(token, size - 3))
        , token) AS tokenNew
FROM @tbl 
    CROSS APPLY (SELECT LEN(token)) AS t(size);

输出

+----+---------+------+----------+
| ID |  token  | size | tokenNew |
+----+---------+------+----------+
|  1 | A785    |    4 | A78.5    |
|  2 | B21423  |    6 | B21.423  |
|  3 | 21432   |    5 | 214.32   |
|  4 | 031258A |    7 | 031.258A |
|  5 | 358     |    3 | 358      |
|  6 | Z94     |    3 | Z94      |
+----+---------+------+----------+

【讨论】:

谢谢,这确实有效,但我希望无需先创建新表即可。 @Freonthewhite,您不需要创建新的数据库表。我为您提供了一个最小的可重现示例。您将其复制到 SSMS 并且它可以工作。您只需要使用SELECT 语句,并将其修改为您的真实数据库表名及其列。 @Freonthewhite,如果建议的解决方案对您有用,请不要忘记将其标记为答案。

以上是关于仅当字符串 > 特定长度时,才将字符添加到字符串的特定位置的主要内容,如果未能解决你的问题,请参考以下文章

仅当表中不存在两个 id 的组合时才将值插入表中

仅当文件尚不存在时才将行附加到文件中

MongoDB/Mongoose - 仅当某个字段是唯一的时才将对象添加到对象数组中

仅当输入为数组时才将类调用为数组

R:仅当同一列中的两行中的值为真时才将值添加到 [row,column]

PostgreSQL:仅当元素唯一时才将元素附加到 jsonb 数组