วิธีรับอักขระตัวแรกของสตริงใน SQL


262

ฉันมีคอลัมน์ SQL ที่มีความยาว 6 ตอนนี้ต้องการใช้อักขระตัวแรกของคอลัมน์นั้น มีฟังก์ชั่นสตริงใน SQL ทำเช่นนี้?

คำตอบ:


436

LEFT(colName, 1)จะทำเช่นนี้ด้วย SUBSTRING(colName, 1, 1)มันเทียบเท่ากับ

ฉันชอบLEFTเนื่องจากฉันคิดว่ามันค่อนข้างสะอาดกว่า แต่จริงๆแล้วมันไม่มีความแตกต่างเลย


2
ฉันไม่รู้เกี่ยวกับเซิร์ฟเวอร์ SQL แต่อย่างมีเหตุผลเซิร์ฟเวอร์ฐานข้อมูลอาจสามารถปรับ LEFT ได้ดีกว่า SUBSTRING เมื่อใช้ดัชนี
thomasrutter

19
@thomasrutter, กำลังมองหาที่แผนการดำเนินการให้ SQL Server (อย่างน้อย 2008R2) ภายในแปลลงในLEFT(colName, length) SUBSTRING(colName, 1, length)ดังนั้นจึงไม่มีการเพิ่มประสิทธิภาพที่นี่เป็นเพียงการตั้งค่า
Alexander Abakumov

44

ฉันชอบ:

SUBSTRING (my_column, 1, 1)

เพราะมันเป็นไวยากรณ์มาตรฐาน SQL-92 และพกพาได้มากกว่า


พูดอย่างเคร่งครัดรุ่นมาตรฐานจะเป็น

SUBSTRING (my_column FROM 1 FOR 1)

ประเด็นก็คือเปลี่ยนจากสิ่งหนึ่งไปเป็นอีกรูปแบบหนึ่งดังนั้นรูปแบบของผู้ค้ารายใดรายหนึ่งที่คล้ายคลึงกันจึงไม่สำคัญ

ป.ล. เมื่อไม่นานมานี้ฉันเพิ่งชี้ให้เห็นว่าฟังก์ชั่นใน SQL มาตรฐานนั้นจงใจขัดกันโดยมีรายการพารามิเตอร์ที่ไม่ได้เป็นคอมมาลิสต์ทั่วไปเพื่อให้สามารถระบุได้อย่างง่ายดายว่ามาจากมาตรฐาน!


1
ขอบคุณ LEFT (str, n) ไม่รองรับหลายรูปแบบ (รวมถึงรูปแบบที่ฉันใช้)
GreySage

1
ทำไมดัชนีเริ่มต้นด้วย 1 และไม่ใช่ด้วย 0 สิ่งนี้จะส่งคืนผลลัพธ์เดียวกัน: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2) มันอยู่ในตำแหน่ง 0 คืออะไร?
FrenkyB



13

มันง่ายที่จะบรรลุโดยต่อไปนี้

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

ทั้ง

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

@Result = his

หรือ

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

@Result = This i


3

INPUT

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

หากคุณค้นหาอักขระตัวแรกของสตริงในสตริง Sql

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

=> return 4

2

เลือกอักขระสองตัวแรกในฟิลด์ที่เลือกด้วย Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.