ฉันมีสตริงขนาดใหญ่ใน SQL Server ฉันต้องการตัดทอนสตริงนั้นให้เหลือ 10 หรือ 15 อักขระ
สตริงเดิม
this is test string. this is test string. this is test string. this is test string.
สตริงที่ต้องการ
this is test string. this is ......
ฉันมีสตริงขนาดใหญ่ใน SQL Server ฉันต้องการตัดทอนสตริงนั้นให้เหลือ 10 หรือ 15 อักขระ
สตริงเดิม
this is test string. this is test string. this is test string. this is test string.
สตริงที่ต้องการ
this is test string. this is ......
คำตอบ:
หากคุณต้องการส่งคืนสตริงแบบยาวเพียงไม่กี่อักขระคุณสามารถใช้:
select
left(col, 15) + '...' col
from yourtable
ดูซอ SQL กับการสาธิต
สิ่งนี้จะส่งคืนอักขระ 15 ตัวแรกของสตริงจากนั้นต่อ...
ท้ายสตริงเข้าด้วยกัน
หากคุณต้องการตรวจสอบให้แน่ใจว่าสตริงที่น้อยกว่า 15 ไม่ได้รับ...
คุณสามารถใช้:
select
case
when len(col)>=15
then left(col, 15) + '...'
else col end col
from yourtable
...
ต่อท้ายเมื่อไม่มีผล
คุณสามารถใช้ได้
LEFT(column, length)
หรือ
SUBSTRING(column, start index, length)
ฉันคิดว่าคำตอบตรงนี้ดีมาก แต่ฉันต้องการเพิ่มสถานการณ์
หลายครั้งฉันต้องการนำอักขระจำนวนหนึ่งออกจากด้านหน้าของสตริงโดยไม่ต้องกังวลเกี่ยวกับความยาว มีหลายวิธีในการดำเนินการกับ RIGHT () และ SUBSTRING () แต่ทุกคนจำเป็นต้องทราบความยาวของสตริงซึ่งบางครั้งอาจทำให้สิ่งต่างๆช้าลงได้
ฉันใช้ฟังก์ชัน STUFF () แทน:
SET @Result = STUFF(@Result, 1, @LengthToRemove, '')
สิ่งนี้จะแทนที่ความยาวของสตริงที่ไม่จำเป็นด้วยสตริงว่าง
คุณยังสามารถใช้การดำเนินการ Cast ():
Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
คุณยังสามารถใช้ด้านล่าง iif หลีกเลี่ยงคำสั่ง case และเพิ่มจุดไข่ปลาเมื่อจำเป็นเท่านั้น (ใช้ได้ดีใน SQL Server 2012 และใหม่กว่าเท่านั้น) และคำสั่ง case เป็นไปตาม ANSI มากกว่า (แต่มีรายละเอียดมากกว่า)
SELECT
col, LEN(col),
col2, LEN(col2),
col3, LEN(col3) FROM (
SELECT
col,
LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2,
LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3
from (
select 'this is a long string. One that is longer than 15 characters' as col
UNION
SELECT 'short string' AS col
UNION
SELECT 'string==15 char' AS col
UNION
SELECT NULL AS col
UNION
SELECT '' AS col
) x
) y
CASE
WHEN col IS NULL
THEN ''
ELSE SUBSTRING(col,1,15)+ '...'
END AS Col