sql-server - 从字符串中分离数值
问题描述
我遇到了一个问题,我需要将以下内容分开BPO007
以显示BPO
和007
. 在某些情况下,另一个示例是GFE0035
,我仍然需要从字符中拆分数值。
当我执行以下操作时select isnumeric('BPO007')
,结果为 0,这是正确的,但是,我不确定如何将它们彼此分开。
我看过这个链接,但它并没有真正回答我的问题。
我需要上述拆分用于触发器中的单独验证目的。
我将如何开发这样的东西?
先感谢您。
解决方案
正如之前的评论中所说:
关于你的问题我将如何开发这样的东西?:
不要在同一列中存储两条信息(请阅读1.NF)。您应该在数据库中为BPO和007(或者更确切地说是整数7)保留单独的列。然后在输出中需要时
使用一些字符串方法来计算BPO007 。
只是为了不让你一个人在雨中。
DECLARE @tbl TABLE(YourColumn VARCHAR(100));
INSERT INTO @tbl VALUES('BPO007'),('GFE0035');
SELECT YourColumn,pos
,LEFT(YourColumn,pos) AS CharPart
,CAST(SUBSTRING(YourColumn,pos+1,1000) AS INT) AS NumPart
FROM @tbl
CROSS APPLY(SELECT PATINDEX('%[0-9]%',YourColumn)-1) AS A(pos);
将返回
YourColumn pos CharPart NumPart
BPO007 3 BPO 7
GFE0035 3 GFE 35
提示:我在CROSS APPLY
这里使用 a 来计算第一个数字字符的位置,然后pos
像使用变量一样在实际查询中使用。否则PATINDEX
必须重复...
推荐阅读
- power-automate - 电源自动化。一次审批多行
- command-line - 提取文件并重命名每个 .rar 中的文件之一
- docker - 在 Docker 中自动启动 Headless Chromium
- assets - 尝试使用“com.day.cq.dam.core.impl.collection.DamCollectionManager;”创建空资产集合
- javascript - React Native VirtualizedList 从对象中提取键
- listview - 在颤动中实现带有文本的可缩放列表视图
- python - python-使用os.walk查找文件名中值最高的文件
- esp32 - ESP32 devkit v1 + LoRa rf96:spi 配置
- sql - Group By 组合到 CASE (SQL DB2)
- javascript - 如何获得razorpay的失败或弹出关闭事件