Làm thế nào để có được ký tự đầu tiên của một chuỗi trong SQL?


262

Tôi có một cột SQL có độ dài là 6. Bây giờ muốn chỉ lấy char đầu tiên của cột đó. Có bất kỳ hàm chuỗi nào trong SQL để làm điều này không?

Câu trả lời:


436

LEFT(colName, 1)cũng sẽ làm điều này, cũng Nó tương đương với SUBSTRING(colName, 1, 1).

Tôi thích LEFT, vì tôi thấy nó sạch hơn một chút, nhưng thực sự, không có sự khác biệt nào cả.


2
Tôi không biết về máy chủ SQL, nhưng về mặt logic, máy chủ cơ sở dữ liệu có thể tối ưu hóa LEFT tốt hơn SUBSTRING khi nó đang sử dụng một chỉ mục.
thomasrutter

19
@thomasrutter, Nhìn vào một kế hoạch thực hiện, SQL Server (ít nhất là 2008R2) được dịch bên LEFT(colName, length)trong SUBSTRING(colName, 1, length). Vì vậy, không có bất kỳ tối ưu hóa nào ở đây, nó chỉ là một ưu tiên.
Alexander Abakumov

44

Tôi thích:

SUBSTRING (my_column, 1, 1)

bởi vì đó là cú pháp SQL-92 tiêu chuẩn và do đó dễ mang theo hơn.


Nói đúng ra, phiên bản tiêu chuẩn sẽ là

SUBSTRING (my_column FROM 1 FOR 1)

Vấn đề là, chuyển đổi từ cái này sang cái khác, do đó với bất kỳ biến thể nhà cung cấp tương tự nào, là tầm thường.

ps Gần đây tôi mới chỉ ra rằng các hàm trong SQL tiêu chuẩn trái ngược nhau một cách có chủ ý, bằng cách có các danh sách tham số không phải là dấu phẩy thông thường, để làm cho chúng dễ dàng được xác định là từ tiêu chuẩn!


1
Cảm ơn bạn, LEFT (str, n) không được hỗ trợ bởi nhiều định dạng (bao gồm cả định dạng tôi đang sử dụng).
GreySage

1
Tại sao chỉ số bắt đầu bằng 1 mà không phải bằng 0? Điều này trả về cùng một kết quả: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Nó ở vị trí 0 là gì?
FrenkyB

19

SUBSTRING ( MyColumn, 1 , 1 )cho nhân vật đầu tiên và SUBSTRING ( MyColumn, 1 , 2 )cho hai người đầu tiên.



13

Nó là đơn giản để đạt được bằng cách sau đây

DECLARE @SomeString NVARCHAR(20) = 'This is some string'
DECLARE @Result NVARCHAR(20)

Hoặc

SET @Result = SUBSTRING(@SomeString, 2, 3)
SELECT @Result

@Result = his

hoặc là

SET @Result = LEFT(@SomeString, 6)
SELECT @Result

@Result = This i


3

ĐẦU VÀO

STRMIDDLENAME
--------------
Aravind Chaterjee
Shivakumar
Robin Van Parsee

SELECT STRMIDDLENAME, 
CASE WHEN INSTR(STRMIDDLENAME,' ',1,2) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)||
SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,2)+1,1)
WHEN INSTR(STRMIDDLENAME,' ',1,1) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)
ELSE SUBSTR(STRMIDDLENAME,1,1)
END AS FIRSTLETTERS
FROM Dual;

OUTPUT
STRMIDDLENAME                    FIRSTLETTERS
---------                        -----------------
Aravind Chaterjee                AC           
Shivakumar                       S
Robin Van Parsee                 RVP

2

Nếu bạn tìm kiếm char đầu tiên của chuỗi trong chuỗi Sql

SELECT CHARINDEX('char', 'my char')

=> return 4

2

Chọn hai ký tự đầu tiên trong trường đã chọn với Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.