【问题标题】:Get before last position of string in SQL Server在 SQL Server 中字符串的最后位置之前获取
【发布时间】:2018-01-30 10:42:48
【问题描述】:

我有一个关于 SQL Server 的问题。

我想在最后一个 IN 字符位置之前获取数据。

Stringposition:

CREATE TABLE [dbo].[Stringposition]
(
    [Name] [varchar](100) NULL
) ON [PRIMARY]
GO

INSERT [dbo].[Stringposition] ([Name]) 
VALUES (N'PN MAIN DOOR IN'), (N'PN PASSAGE IN'),
       (N'INTestingIN'), (N'YENINFgh'), (N'inGENTRINin')
GO

期望输出数据如下:

Name
--------------
PN MAIN DOOR
PN PASSAGE 
INTesting
YEN
inGENTRIN

我试过这个查询:

select 
    substring(name, 0, charindex('in', name, charindex('in', name) + 1)),
    name 
from 
    [dbo].[Stringposition]

但是这个查询没有返回预期的结果。

请告诉我如何编写查询以在 SQL Server 中完成此任务。

【问题讨论】:

  • 旁注:由于您的列定义为VARCHAR(100),因此它是一个-Unicode 列。插入时,不得使用 N'....' 表示法 - 这会导致字符串文字被视为 Unicode - 然后必须将它们转换回 non-Unicode 以匹配数据类型。如果你使用VARCHAR,你应该使用INSERT INTO .. VALUES('abc');没有N前缀!)

标签: sql-server string split


【解决方案1】:

你可以试试这个

SELECT SUBSTRING(name, 1, LEN(name) - CHARINDEX('ni', REVERSE(name)) - 1)  
FROM stringposition

输出

NAME
-----------------
PN MAIN DOOR   
PN PASSAGE  
INTesting  
YEN  
inGENTRIN

【讨论】:

    【解决方案2】:

    使用这个查询:

    SELECT LTRIM(RTRIM(LEFT('your string', LEN('your string') - CHARINDEX(REVERSE('your special string'), REVERSE('your string')) - 1)))
    FROM stringposition
    

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2013-02-15
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多