开发者社区 问答 正文

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

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

TQ7394 SZ910284 T r1534 su8472 我想更新此列,以使前两个字符为大写。我也想删除前两个字符之间的任何空格。这样T q1234就变成了TQ1234。

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

在T-SQL中这可能吗?在ANSI-92中怎么样?我总是很想看看其他数据库也是如此,所以请随时为PostgreSQL,MySQL等发布答案。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 17:06:04 575 分享 版权
1 条回答
写回答
取消 提交回答
  • 这是一个解决方案:

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

    /* 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 */

    2019-11-18 17:06:28
    赞同 展开评论