首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发出patindex和unicode字符'-‘

发出patindex和unicode字符'-‘
EN

Stack Overflow用户
提问于 2017-02-14 09:14:38
回答 2查看 349关注 0票数 2

我有一个名为Dats的字符串,它要么是普通外观xxxx-nnnnn (其中x是一个字符,n是一个数字),要么是nnn-nnnnnn

我只想把号码还回去。

为此,我试过:

代码语言:javascript
复制
SELECT Distinct dats, 
Left(SubString(artikelnr, PatIndex('%[0-9.-]%', artikelnr), 8000), PatIndex('%[^0-9.-]%', SubString(artikelnr, PatIndex('%[0-9.-]%', artikelnr), 8000) + 'X')-1)
FROM ThatDatabase

这几乎是我想要的。它移除常规字符x,但不删除unicode字符-。我怎么能把这个也移除呢?而且,对于每一行都有两个PatIndex函数似乎是相当无效的,有办法避免这种情况吗?(这将在大型数据库中使用,其中查询的结果将用作键)。

编辑:更新为一个新的数据库,有时包含额外的-.以及-

代码语言:javascript
复制
DECLARE @T as table
(
    dats nvarchar(10)
)

INSERT INTO @T VALUES
('111BWA30'),
('115-200-11')
('115-22.4-1')
('10.000.22')
('600F-FFF200')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-14 09:25:59

我不确定您是否也想要-字符之前的数字,但如果需要,下面是一种方法:

创建并填充示例表(--请在今后的问题中保存此步骤)

代码语言:javascript
复制
DECLARE @T as table
(
    dats nvarchar(10)
)

INSERT INTO @T VALUES
('abcde-1234'),
('23-343')

查询:

代码语言:javascript
复制
SELECT  dats,
        case when patindex('%[^0-9]-[0-9]%', dats) > 0 then
            right(dats, len(dats) - patindex('%-[0-9]%', dats))
        else
            stuff(dats, charindex('-', dats), 1, '')
        end As NumbersOnly
FROM @T

结果:

代码语言:javascript
复制
dats        NumbersOnly
abcde-1234  1234
23-343      23343

如果您想要-字符右侧的唯一数字,则更简单:

代码语言:javascript
复制
SELECT  dats,
        right(dats, len(dats) - patindex('%-[0-9]%', dats)) As RightNumbersOnly
FROM @T

结果:

代码语言:javascript
复制
dats        RightNumbersOnly
abcde-1234  1234
23-343      343
票数 4
EN

Stack Overflow用户

发布于 2017-02-14 10:00:15

如果您知道需要删除哪些字符,则使用REPLACE函数

代码语言:javascript
复制
DECLARE @T as table
(
    dats nvarchar(100)
)

INSERT INTO @T 
VALUES
('111BWA30'),
('115-200-11'),
('115-22.4-1'),
('10.000.22'),
('600F-FFF200')

SELECT REPLACE(REPLACE(dats, '.', ''), '-', '')
FROM @T
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42222026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档