技术请求:为提取文本中Rs数值的SQL代码编写操作流程
从文本中提取卢比(Rs)数值的SQL操作流程
以下是这段SQL代码的分步操作说明:
1. 创建临时存储表
先创建名为#income的临时表,用来存放包含收入、支出描述的文本数据。表中仅设一个clientIncome字段,类型为NVARCHAR(200),适配不同长度的业务文本。
CREATE TABLE #income (clientIncome NVARCHAR(200));
2. 插入测试文本数据
向临时表插入多条模拟业务场景的文本数据,其中部分数据带有Rs标识的金额,部分仅为费用类别描述,用于验证提取逻辑的有效性。
INSERT INTO #income ( clientIncome ) VALUES ('INCOME FROM RETAIL SALE OF VEGETABLE BUSINESS RS 30,000/-'), ('INCOME FROM WHOLE SALE OF VEGETABLE BUSINESS- RS 40,000/-'), ('TOTAL INCOME APPROX- RS 70,000/-'), ('TOTAL EXPENSES- RS 35,000/-'), ('[SALARIES, FUEL, OTHER EXPENSES]'), ('NET INCOME- RS 35,000/-');
3. 提取并转换卢比数值
通过查询语句从文本中提取Rs后的金额,并转换为数值类型:
- 用
CHARINDEX('RS ', i.clientIncome)判断文本是否包含Rs标识 - 若存在标识,用
SUBSTRING截取Rs后到/-前的金额字符串,通过replace去掉金额中的逗号分隔符,再用CAST转换为NUMERIC数值类型 - 若不存在Rs标识,返回
NULL
SELECT i.clientIncome, CASE WHEN CHARINDEX('RS ', i.clientIncome) != 0 THEN CAST(replace(SUBSTRING( i.clientIncome, CHARINDEX('RS ', i.clientIncome) + 3, CHARINDEX('/-', i.clientIncome) - CHARINDEX('RS ', i.clientIncome) - 3 ),',','') AS NUMERIC) ELSE NULL END income FROM #income AS i;
4. 清理临时表
操作完成后删除临时表,释放数据库资源:
DROP TABLE #income;
内容的提问来源于stack exchange,提问作者Sridhar Babu
相关产品推荐
相关产品推荐

