如何使用SQL Server将原始数据表转换为指定格式的查询结果?
需求说明
原始数据表结构及数据:
| name | qty |
|---|---|
| QMORIASDWAD 1 | |
| QMORIASDWAD 3 | |
| QMORIASDWAD 4 | |
| QMORIASDWAD 5 | |
| QMORIASDWAD 6 | |
| QMORIASDWAD 7 | |
| QMORIASDWAD 8 |
期望查询结果:
| name | qty |
|---|---|
| qm2 | 1 |
| qm2 | 3 |
| qm2 | 4 |
| qm2 | 5 |
| qm2 | 6 |
| qm2 | 7 |
| qm2 | 8 |
解决方案
可以通过SQL Server的字符串处理函数实现需求,示例SQL语句如下:
SELECT 'qm2' AS name, TRY_CAST(RIGHT(name, PATINDEX('%[^0-9]%', REVERSE(name)) - 1) AS INT) AS qty FROM 你的表名;
逻辑说明
- 固定name列输出:直接用常量字符串
'qm2'作为name列的返回值。 - 提取qty数字:
REVERSE(name):反转原始name字符串,便于从开头定位第一个非数字字符。PATINDEX('%[^0-9]%', REVERSE(name)):找到反转后字符串中第一个非数字字符的位置,以此确定原始字符串末尾数字的长度。RIGHT(name, ... -1):截取原始name字符串末尾的数字部分。TRY_CAST(...) AS INT:将截取到的字符串转为整数,若遇到非数字内容会返回NULL,避免查询报错。
如果原始name列中数字前的空格数量固定,也可以用更简洁的写法,比如假设数字前有4个空格:
SELECT 'qm2' AS name, TRY_CAST(RTRIM(SUBSTRING(name, CHARINDEX(' ', name), LEN(name))) AS INT) AS qty FROM 你的表名;
内容的提问来源于stack exchange,提问作者human
相关产品推荐
相关产品推荐

