sql case when 截取
时间: 2023-05-08 10:59:00 浏览: 116
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语句完成数据截取,不仅可以减少代码量和程序复杂度,还能提高查询效率,保证数据处理的准确性和一致性,方便后续的数据分析和应用。
相关问题
CASE WHEN LEFT
CASE WHEN...LEFT结构是SQL中的条件表达式,通常与聚合函数一起使用,例如SUM、AVG等。它的基本语法如下:
```sql
CASE
WHEN condition THEN result1
[WHEN condition THEN result2]
...
ELSE default_result
END
LEFT(column_name, length)
```
在这里,"condition"是判断的条件,如果满足则返回"result1"对应的值,如果不满足则继续检查下一条WHEN部分,直到找到匹配的或遇到ELSE子句,其后的default_result会被返回。LEFT则是字符串函数,用于截取列中的指定长度的部分。
例如,假设我们要计算员工薪水,如果薪水大于5000,则显示为'高于5000',小于等于5000的显示为实际金额,不足四位数的在左边补零:
```sql
SELECT
CASE
WHEN salary > 5000 THEN '高于5000'
ELSE LEFT(CAST(salary AS VARCHAR), 4) || '元'
END AS formatted_salary
FROM employees;
```
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`分支返回'无数据'。
请注意,这个查询假设输入的字符串是纯文本,没有额外的特殊字符干扰。如果是更复杂的情况,可能需要进一步调整正则表达式或处理方法。
阅读全文
相关推荐
















