gpt4 book ai didi

sql - 数据库表中一列中的前两个字符大写

转载 作者:行者123 更新时间:2023-12-01 08:43:00 25 4
gpt4 key购买 nike

我在数据库表 (SQL Server 2005) 中有一个列,其中包含如下数据:

TQ7394
SZ910284
T r1534
su8472

我想更新此列,使前两个字符为大写。我还想删除前两个字符之间的任何空格。所以 T q1234 会变成 TQ1234

该解决方案应该能够处理前两个字符之间的多个空格。

这在 T-SQL 中可行吗?在 ANSI-92 中怎么样?我也一直很想看看在其他数据库中是如何做到这一点的,所以请随时为 PostgreSQL、MySQL 等发布答案。

最佳答案

这里有一个解决方案:

编辑: 更新支持在第一个和第二个非空格字符之间替换多个空格

/* TEST TABLE */
DECLARE @T AS TABLE(code Varchar(20))
INSERT INTO @T SELECT 'ab1234x1' UNION SELECT ' ab1234x2'
UNION SELECT ' ab1234x3' UNION SELECT 'a b1234x4'
UNION SELECT 'a b1234x5' UNION SELECT 'a b1234x6'
UNION SELECT 'ab 1234x7' UNION SELECT 'ab 1234x8'

SELECT * FROM @T
/* INPUT
code
--------------------
ab1234x3
ab1234x2
a b1234x6
a b1234x5
a b1234x4
ab 1234x8
ab 1234x7
ab1234x1
*/

/* START PROCESSING SECTION */
DECLARE @s Varchar(20)
DECLARE @firstChar INT
DECLARE @secondChar INT

UPDATE @T SET
@firstChar = PATINDEX('%[^ ]%',code)
,@secondChar = @firstChar + PATINDEX('%[^ ]%', STUFF(code,1, @firstChar,'' ) )
,@s = STUFF(
code,
1,
@secondChar,
REPLACE(LEFT(code,
@secondChar
),' ','')
)
,@s = STUFF(
@s,
1,
2,
UPPER(LEFT(@s,2))
)
,code = @s
/* END PROCESSING SECTION */

SELECT * FROM @T
/* OUTPUT
code
--------------------
AB1234x3
AB1234x2
AB1234x6
AB1234x5
AB1234x4
AB 1234x8
AB 1234x7
AB1234x1
*/

关于sql - 数据库表中一列中的前两个字符大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com