SQL在选择中查找字符串

发布于 2024-10-16 12:45:36 字数 252 浏览 2 评论 0原文

我有一个这样的选择语句:

SELECT ColumnA,
CASE ColumnB = 'England' THEN ...

在 THEN 语句之后的部分中,我想从 ColumnC 中获取数字,

例如 ColumnC 值 = ABC 123 DEF,并且我需要“123”部分。

有谁知道当“123”始终位于字符串中仅有的两个空格之间时我可以在选择中执行此操作的sql代码? (微软 SQL)

I have a select statement like this:

SELECT ColumnA,
CASE ColumnB = 'England' THEN ...

In the part after the THEN statement, i want to take the numbers from ColumnC,

e.g. ColumnC value = ABC 123 DEF, and i need the '123' part.

Does anyone know the sql code i can use to do this within the select when the '123' will always be in between the only 2 spaces in the string? (MS SQL)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扮仙女 2024-10-23 12:45:36

主要关键是需要使用ColumnC LIKE '% % %'这样在数据不包含两个空格的情况下才不会失败。

如果您的数字长度少于 20 个字符,您可以使用这个

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
   RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....

或者您可以使用这个

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
    SUBSTRING(
        SUBSTRING(
            ColumnC,
            1,
            CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
        1+CHARINDEX(' ', ColumnC),
        LEN(ColumnC))
ELSE ....

The main key is that you need to use ColumnC LIKE '% % %' so that it does not fail when the data does not contain two spaces.

If your numbers are going to be less than 20-char long, you can use this

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
   RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....

Or you can use this

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
    SUBSTRING(
        SUBSTRING(
            ColumnC,
            1,
            CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
        1+CHARINDEX(' ', ColumnC),
        LEN(ColumnC))
ELSE ....
情释 2024-10-23 12:45:36

您可以使用 CHARINDEXSUBSTRING 的组合:

DECLARE @Test TABLE(ColumnC varchar(100))
INSERT @Test 
VALUES ('ABC 123 DEF')

SELECT SUBSTRING(ColumnC,
          CHARINDEX(' ', ColumnC) + 1, -- first space
          CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
             - CHARINDEX(' ', ColumnC)) -- length from first to second space 
FROM @Test

对于提供的示例字符串,这可以按预期工作。

You can use a combination of CHARINDEX and SUBSTRING:

DECLARE @Test TABLE(ColumnC varchar(100))
INSERT @Test 
VALUES ('ABC 123 DEF')

SELECT SUBSTRING(ColumnC,
          CHARINDEX(' ', ColumnC) + 1, -- first space
          CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
             - CHARINDEX(' ', ColumnC)) -- length from first to second space 
FROM @Test

This works as expected for the sample string provided.

多情出卖 2024-10-23 12:45:36
SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)
SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文