วิธีการตัดสตริงใน SQL Server


132

ใน SQL Server 2017 คุณสามารถใช้ไวยากรณ์นี้ได้ แต่ใช้ไม่ได้ในเวอร์ชันก่อนหน้า:

SELECT Name = TRIM(Name) FROM dbo.Customer;

คำตอบ:


239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer

3
นี่เป็นวิธีที่ง่ายที่สุดเพียงอย่าลืมว่าชื่อแทนคอลัมน์ของคุณจะถูกส่งคืน
Miles

1
@Miles - ฉันเพิ่มนามแฝงเพื่อความสมบูรณ์
Ben Hoffstein

2
ฉันเข้าใจว่านี่เป็นวิธีที่ถูกต้องในการใช้การตัดทอนค่า แต่คุณอธิบายได้ไหมว่าทำไมต้องใช้ทั้ง LTRIM และ RTRIM ในเมื่อเราสามารถใช้แค่ TRIM แทนได้
Code Buster

6
@CodeBuster: SQL Server ไม่มีฟังก์ชัน TRIM ที่กำหนดไว้แม้ในเวอร์ชัน 2014
alextansc

7
ขณะนี้ SQL Server มี TRIM ในเวอร์ชัน 2017 docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye

64

ในการตัดแต่งทางด้านขวาให้ใช้:

SELECT RTRIM(Names) FROM Customer

หากต้องการตัดด้านซ้ายให้ใช้:

SELECT LTRIM(Names) FROM Customer

ในการตัดแต่งทั้งสองด้านให้ใช้:

SELECT LTRIM(RTRIM(Names)) FROM Customer

5
อนึ่งเหตุใดที่เป็นไปได้ที่ Microsoft อาจมีในการรวมฟังก์ชัน LTRIM และ RTRIM โดยไม่มี TRIM มันแปลกมาก
Ben Hoffstein

เพราะมันซ้ำซ้อน. คุณสามารถทำสิ่งเดียวกันได้ด้วย LTRIM (RTRIM (var))
Kibbee

52
ใช่ แต่เป็นการเรียกใช้ฟังก์ชันสองครั้ง คุณสามารถพูดได้ว่ามันซ้ำซ้อนทั้งหมดเนื่องจาก TSQL มี CHARINDEX และ SUBSTRING แต่นั่นเป็นวิธีที่งี่เง่าในการดู
Ben Hoffstein

9
มันไม่ซ้ำซ้อนเลย การไม่นำเสนอฟังก์ชันเดียวที่เรียกว่า TRIM ทำให้ภาระทางไวยากรณ์แก่ผู้ใช้
joelc

3
อาจเป็นการกำกับดูแลหรือเป็นหนึ่งในคุณลักษณะเหล่านั้นที่มีการใช้งานเนื่องจากทุกคุณลักษณะเริ่มต้นที่ -100 คะแนน (ซึ่งนำไปสู่ชุดคุณลักษณะที่ไม่ต่อเนื่องกันแทนที่จะเป็นชุดคุณลักษณะที่จัดลำดับความสำคัญ IMHO)
siride

7

ฉันคิดว่านี่เป็นแบบฝึกหัดขัดข้อมูลเพียงครั้งเดียว เมื่อเสร็จแล้วตรวจสอบให้แน่ใจว่าคุณได้เพิ่มข้อ จำกัด ของฐานข้อมูลเพื่อป้องกันข้อมูลที่ไม่ดีในอนาคตเช่น

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

นอกจากนี้ให้พิจารณาไม่อนุญาตให้ใช้อักขระอื่น ๆ (แท็บการคืนค่าขนส่งฟีดบรรทัด ฯลฯ ) ที่อาจทำให้เกิดปัญหา

นอกจากนี้ยังอาจจะเป็นช่วงเวลาที่ดีในการแยกรายชื่อเหล่านั้นลงในfamily_name, first_nameฯลฯ :)



0

ใน sql server 2008 r2 พร้อมนิพจน์ ssis เรามีฟังก์ชั่นตัดแต่ง

SQL Server Integration Services (SSIS) เป็นส่วนประกอบของซอฟต์แวร์ฐานข้อมูล Microsoft SQL Server ที่สามารถใช้เพื่อดำเนินการย้ายข้อมูลได้หลากหลาย

คุณสามารถดูคำอธิบายทั้งหมดได้ที่ลิงค์นี้

http://msdn.microsoft.com/en-us/library/ms139947.aspx

แต่ฟังก์ชันนี้มีข้อ จำกัด บางประการซึ่ง msdn กล่าวถึงในหน้านั้นด้วย แต่นี่อยู่ใน sql server 2008 r2

TRIM("   New York   ") .The return result is "New York".

3
สิ่งนี้ไม่มีส่วนเกี่ยวข้องกับ MS SQL ยกเว้นว่าอยู่ในผลิตภัณฑ์ที่มาพร้อมกับฐานข้อมูล
siride

-1

"REPLACE" เวอร์ชันขยาย:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.