sql case when 截取
时间: 2023-05-08 21:59:00 浏览: 105
SQL的CASE WHEN语句可以实现在查询结果中对数据进行条件判断,并返回不同的结果。在数据处理中经常需要对数据进行截取,SQL的CASE WHEN语句也可以用来实现这一功能。
SELECT
CASE
WHEN CHARINDEX('-', ColumnName) > 0
THEN LEFT(ColumnName, charindex('-', ColumnName) -1)
ELSE ColumnName
END as NewColumnName
FROM TableName
以上是一个简单的例子,其中CHARINDEX函数用来查找字符串中特定字符的位置,LEFT函数则可以使用所定位的字符的位置来截取字符串,最后使用CASE WHEN语句对数据进行判断和处理,并将新的结果以NewColumnName作为字段名呈现出来。
通过使用SQL的CASE WHEN语句完成数据截取,不仅可以减少代码量和程序复杂度,还能提高查询效率,保证数据处理的准确性和一致性,方便后续的数据分析和应用。
相关问题
SQL,用case when写,当一个混合字符串中包含一个连续的18位数字则从这个混合部分中截取出这个18位数字,没有的话输出无数据
你可以使用SQL的`CASE`语句配合`LIKE`或者`REGEXP`函数来实现这个需求。假设你的表名为`your_table`,列名是`your_column`,你可以编写这样的查询:
```sql
SELECT
CASE
WHEN your_column LIKE '%\b[0-9]{18}\b%'
THEN SUBSTRING(your_column, INSTR(your_column, '\b[0-9]{18}\b') + LENGTH('\b[0-9]{18}\b') - 1, 18)
ELSE '无数据'
END AS extracted_number
FROM
your_table;
```
这里的关键点是:
- `LIKE '%\b[0-9]{18}\b%'` 检查字符串是否包含连续的18位数字。
- `INSTR()` 函数找到数字序列开始的位置。
- `SUBSTRING()` 函数从找到的位置截取18位数字。
- 如果没有找到,`ELSE`分支返回'无数据'。
请注意,这个查询假设输入的字符串是纯文本,没有额外的特殊字符干扰。如果是更复杂的情况,可能需要进一步调整正则表达式或处理方法。
SQL,用case when写,当一个混合字符串#NOTE_S中包含一个连续的18位数字则从这个混合部分中截取出这个18位数字,没有的话输出无数据
SQL中的CASE WHEN语句可以用来根据特定条件执行不同的操作。为了从混合字符串`#NOTE_S`中提取连续的18位数字,你可以使用类似下面的查询:
```sql
SELECT
CASE
WHEN REGEXP_LIKE(#NOTE_S, '^[0-9]{18}$') THEN SUBSTR(#NOTE_S, INSTR(#NOTE_S, '^[0-9]{18}'), LENGTH('#NOTE_S'))
ELSE '无数据'
END AS ExtractedNumber
FROM your_table;
```
这里做了以下几步:
1. `REGEXP_LIKE(#NOTE_S, '^[0-9]{18}$')`: 使用正则表达式检查`#NOTE_S`是否以18位数字开头并结束。`'^[0-9]{18}'`匹配18位连续的数字,`$`表示字符串结尾。
2. `INSTR(#NOTE_S, '^[0-9]{18}')`: 查找该18位数字在字符串`#NOTE_S`中的开始位置。
3. `SUBSTR(#NOTE_S, ..., LENGTH(#NOTE_S))`: 使用`SUBSTR`函数截取从开始位置到字符串结尾的部分,如果找到18位数字,则返回这部分;如果没有找到,将返回整个字符串。
阅读全文