ใน SQL ฉันจะลบ 4 อักขระแรกของค่าของคอลัมน์ที่ระบุในตารางได้อย่างไร ชื่อคอลัมน์และค่าตัวอย่างคือStudent Code
ABCD123Stu1231
ฉันต้องการลบ 4 ตัวอักษรแรกจากตารางของฉันสำหรับบันทึกทั้งหมด
กรุณาแนะนำฉัน
ใน SQL ฉันจะลบ 4 อักขระแรกของค่าของคอลัมน์ที่ระบุในตารางได้อย่างไร ชื่อคอลัมน์และค่าตัวอย่างคือStudent Code
ABCD123Stu1231
ฉันต้องการลบ 4 ตัวอักษรแรกจากตารางของฉันสำหรับบันทึกทั้งหมด
กรุณาแนะนำฉัน
คำตอบ:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
แก้ไข: เพื่ออธิบาย RIGHT รับอาร์กิวเมนต์ 2 ตัวคือสตริง (หรือคอลัมน์) เพื่อดำเนินการและจำนวนอักขระที่จะส่งคืน (เริ่มที่ด้าน "ขวา" ของสตริง) LEN ส่งคืนความยาวของข้อมูลคอลัมน์และเราลบสี่เพื่อให้ฟังก์ชั่น RIGHT ของเราปล่อยให้อักขระ 4 ตัวซ้ายสุด "หลัง"
หวังว่ามันจะสมเหตุสมผล
แก้ไขอีกครั้ง - ฉันเพิ่งอ่านคำตอบของแอนดรูว์และเขาอาจทำงานผิดพลาดได้อย่างถูกต้องและฉันอาจเข้าใจผิด หากเป็นกรณีนี้ (และคุณต้องการอัปเดตตารางแทนที่จะส่งคืนผลลัพธ์แบบแพทย์) คุณสามารถทำสิ่งนี้ได้:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
เขาอยู่ในเส้นทางที่ถูกต้อง แต่วิธีแก้ปัญหาของเขาจะเก็บอักขระ 4 ตัวไว้ที่จุดเริ่มต้นของสายอักขระแทนที่จะละทิ้งอักขระ 4 ตัวที่กล่าวไว้
COL_LENGTH('MyTable', 'MyColumn')
แทนที่จะเป็นLEN(MyColumn)
เพราะในกรณีของฉันฉันต้องการยกเว้นอักขระ n ตัวแรกไม่ว่าขนาดของเนื้อหาจริงภายในคอลัมน์จะเป็นเท่าไหร่ แต่สิ่งนี้ใช้ได้ดีกว่านี้!
Stuff(someColumn, 1, 4, '')
สิ่งนี้บอกว่าเริ่มต้นด้วย1
ตำแหน่งตัวอักษรตัวแรกแทนที่4
ตัวอักษรด้วยอะไร''
someColumn
มีบางสิ่งที่ซับซ้อนเช่นการเลือกย่อยจาก CTE หรือบางสิ่งบางอย่างสิ่งนี้ไม่จำเป็นต้องประเมินอีกสองครั้ง
เหตุใดจึงต้องใช้ LEN คุณจึงมี 2 ฟังก์ชั่นสตริง สิ่งที่คุณต้องการคือตัวละคร 5 บน ...
...SUBSTRING (Code1, 5, 8000)...
ลองสิ่งนี้:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
นี่เป็นตัวอย่างง่ายๆของสิ่งที่คุณพยายามทำ :)
CREATE TABLE Codes
(
code1 varchar(10),
code2 varchar(10)
)
INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','')
UPDATE Codes
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4)
ดังนั้นใช้คำสั่งสุดท้ายกับฟิลด์ที่คุณต้องการตัดแต่ง :)
ฟังก์ชั่น SUBSTRING ตัดขอบ Code1 เริ่มต้นที่ตัวอักษร FIFTH และดำเนินการต่อไปตามความยาวของ CODE1 น้อยกว่า 4 (จำนวนอักขระที่ข้ามไปเมื่อเริ่มต้น)
สิ่งที่สมบูรณ์
DECLARE @v varchar(10)
SET @v='#temp'
select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'
คุณสามารถทำได้ใน SQL
substring(StudentCode,4,len(StudentCode))
วากยสัมพันธ์
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
ลองสิ่งนี้ ทำงาน 100%
UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)
คำตอบยอดนิยมไม่เหมาะเมื่อค่าอาจมีความยาวน้อยกว่า 4
คุณจะได้รับ "พารามิเตอร์ความยาวไม่ถูกต้องถูกส่งไปยังฟังก์ชั่นที่ถูกต้อง" เพราะไม่ยอมรับการปฏิเสธ ใช้คำสั่ง CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
ค่าน้อยกว่า 4 ให้พฤติกรรมที่น่าแปลกใจด้านล่างแทนข้อผิดพลาดเพราะการส่งค่าลบไปยัง RIGHT จะตัดอักขระตัวแรกแทนทั้งสตริง มันสมเหตุสมผลมากกว่าที่จะใช้RIGHT(MyColumn, -5)
แทน
ตัวอย่างการเปรียบเทียบสิ่งที่คุณได้รับเมื่อคุณใช้ "length - 5" ของคำตอบสูงสุดแทน "-5":
create temp table foo (foo) as values ('123456789'),('12345678'),('1234567'),('123456'),('12345'),('1234'),('123'),('12'),('1'), ('');
select foo, right(foo, length(foo) - 5), right(foo, -5) from foo;
foo len(foo) - 5 just -5
--------- ------------ -------
123456789 6789 6789
12345678 678 678
1234567 67 67
123456 6 6
12345
1234 234
123 3
12
1
มีฟังก์ชั่นการตัดแต่งในตัวที่สมบูรณ์แบบสำหรับวัตถุประสงค์
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
มันจะเป็นการดีที่จะแบ่งปันสำหรับการใช้ DB2:
INSERT(someColumn, 1, 4, '')
Stuff
ไม่รองรับใน DB2
หากคุณต้องลบอักขระสองสามตัวแรกที่นำหน้าด้วยอักขระพิเศษเช่น#
นี้เป็นสิ่งที่ดี:
UPDATE tblInvalidID
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ')