我在数据库表(SQL Server 2005)中有一列,其中包含如下数据:
TQ7394 SZ910284 T r1534 su8472 我想更新此列,以使前两个字符为大写。我也想删除前两个字符之间的任何空格。这样T q1234就变成了TQ1234。
该解决方案应该能够应对前两个字符之间的多个空格。
在T-SQL中这可能吗?在ANSI-92中怎么样?我总是很想看看其他数据库也是如此,所以请随时为PostgreSQL,MySQL等发布答案。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这是一个解决方案:
编辑: 更新以支持替换第一个和第二个非空格字符之间的多个空格
/* 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 */