Cách tốt nhất để trích xuất từ đầu tiên của chuỗi trong truy vấn máy chủ sql là gì?Trích xuất từ đầu tiên của chuỗi trong truy vấn SQL Server
Trả lời
SELECT CASE CHARINDEX(' ', @Foo, 1)
WHEN 0 THEN @Foo -- empty or single word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word
END
Bạn có lẽ có thể sử dụng điều này trong một UDF:
CREATE FUNCTION [dbo].[FirstWord] (@value varchar(max))
RETURNS varchar(max)
AS
BEGIN
RETURN CASE CHARINDEX(' ', @value, 1)
WHEN 0 THEN @value
ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END
END
GO -- test:
SELECT dbo.FirstWord(NULL)
SELECT dbo.FirstWord('')
SELECT dbo.FirstWord('abc')
SELECT dbo.FirstWord('abc def')
SELECT dbo.FirstWord('abc def ghi')
Thêm sau đây trước khi tuyên bố RETURN
sẽ giải quyết cho trường hợp một không gian hàng đầu đã được bao gồm trong lĩnh vực này:
SET @Value = LTRIM(RTRIM(@Value))
A slight tweak to the function returns the next word from a start point in the entry CREATE FUNCTION [dbo].[GetWord] ( @value varchar(max) , @startLocation int ) RETURNS varchar(max) AS BEGIN SET @value = LTRIM(RTRIM(@Value)) SELECT @startLocation = CASE WHEN @startLocation > Len(@value) THEN LEN(@value) ELSE @startLocation END SELECT @value = CASE WHEN @startLocation > 1 THEN LTRIM(RTRIM(RIGHT(@value, LEN(@value) - @startLocation))) ELSE @value END RETURN CASE CHARINDEX(' ', @value, 1) WHEN 0 THEN @value ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END END GO SELECT dbo.GetWord(NULL, 1) SELECT dbo.GetWord('', 1) SELECT dbo.GetWord('abc', 1) SELECT dbo.GetWord('abc def', 4) SELECT dbo.GetWord('abc def ghi', 20)
Câu trả lời của Marc cho tôi hầu hết mọi thứ tôi cần, nhưng tôi phải đi với patIndex
thay vì charIndex
vì đôi khi các ký tự khác với dấu cách đánh dấu các đầu của từ dữ liệu của tôi. Ở đây tôi đang sử dụng '%[ /-]%'
để tìm kiếm dấu cách, dấu gạch chéo hoặc dấu gạch ngang.
Select race_id, race_description
, Case patIndex ('%[ /-]%', LTrim (race_description))
When 0 Then LTrim (race_description)
Else substring (LTrim (race_description), 1, patIndex ('%[ /-]%', LTrim (race_description)) - 1)
End race_abbreviation
from tbl_races
Kết quả ...
race_id race_description race_abbreviation
------- ------------------------- -----------------
1 White White
2 Black or African American Black
3 Hispanic/Latino Hispanic
Nên biết trước: đây là cho một tập dữ liệu nhỏ (US liên bang loại báo cáo chủng tộc); Tôi không biết điều gì sẽ xảy ra với hiệu suất khi thu nhỏ tới số lượng khổng lồ.
tôi muốn làm một cái gì đó như thế này mà không cần thực hiện một chức năng riêng biệt, và đã đưa ra phương pháp này đơn giản một dòng:
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
này sẽ trả về kết quả là "đầu tiên"
Đó là ngắn, chỉ là không mạnh mẽ, vì nó giả định chuỗi của bạn không bắt đầu với một không gian. Nó sẽ xử lý các đầu vào một từ, các đầu vào nhiều từ và các đầu vào chuỗi rỗng hoặc NULL.
Hãy thử này:
Select race_id, race_description
, Case patIndex ('%[ /-]%', LTrim (race_description))
When 0 Then LTrim (race_description)
Else substring (LTrim (race_description), 1, patIndex ('%[ /-]%', LTrim (race_description)) - 1)
End race_abbreviation
từ tbl_races
Enhancement của câu trả lời Ben Brandt để bù đắp ngay cả khi chuỗi bắt đầu với không gian bằng cách áp dụng LTRIM(). Đã cố gắng chỉnh sửa câu trả lời của anh ấy nhưng bị từ chối, vì vậy tôi hiện đang đăng riêng câu trả lời ở đây.
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(LTRIM(@test),1,(CHARINDEX(' ',LTRIM(@test) + ' ')-1))
DECLARE @string NVARCHAR(50)
SET @string = 'CUT STRING'
SELECT LEFT(@string,(PATINDEX('% %',@string)))
- 1. Vấn đề với trích xuất ngày trong SQL Server
- 2. Truy vấn MySQL để trích xuất từ đầu tiên từ một trường
- 3. Trích xuất 3 phần đầu tiên của một IPV4
- 4. Trích xuất một Hội đồng .NET từ SQL Server 2005
- 5. Truy vấn SQL Server từ PHP
- 6. Trích xuất giờ từ một DateTime (SQL Server 2005)
- 7. Làm cách nào để trích xuất tham số truy vấn từ chuỗi URL trong PHP?
- 8. Trích xuất URL từ chuỗi
- 9. Điều chỉnh truy vấn SQL để buộc một bản ghi xuất hiện đầu tiên?
- 10. Trích xuất từ đầu tiên trong cơ sở dữ liệu SQLite3
- 11. trích xuất truy vấn SQL thô từ Báo cáo Tinh thể .rpt tệp
- 12. Cố gắng truy xuất 5 ký tự đầu tiên từ chuỗi trong lỗi bash?
- 13. trích xuất từ 10 kết quả hàng đầu mà không sửa đổi truy vấn thực tế
- 14. Trích xuất chuỗi từ giữa các trích dẫn
- 15. Bỏ qua hàng đầu tiên trong SQL Server 2005?
- 16. Nhận ngày đầu tiên trong tuần trong SQL Server
- 17. Cách lấy ký tự đầu tiên của chuỗi trong SQL?
- 18. Chọn ngày đầu tiên của tháng trước trong (DB2) SQL
- 19. BLOB thành chuỗi, SQL Server
- 20. Chèn Microsoft SQL Server từ truy vấn chọn
- 21. Nhận từ đầu tiên của chuỗi
- 22. Nhận 250 từ đầu tiên của chuỗi?
- 23. Truy vấn Active Directory từ SQL Server 2005
- 24. Truy vấn Tab Sql Server 2008
- 25. Chuỗi truy vấn trong lệnh SQL C#
- 26. Truy vấn đệ quy SQL Server
- 27. Truy vấn ngày tạo bảng SQL Server
- 28. Tìm đầu ra SQL của truy vấn được tham số
- 29. Trích xuất thẻ băm từ chuỗi
- 30. Truy vấn tương đương trong sql server cho INFORMATION_SCHEMA
Cám ơn UDF này - Tôi nhận thấy rằng chọn dbo [FirstWord] ('abc def') sẽ trở lại '' Trong hầu hết các trường hợp, bạn có thể muốn trở lại 'abc' – Imageree
'thiết lập. @value = ltrim (rtrim (@value)) 'có thể giải quyết vấn đề này – th1rdey3