जवाबों:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
संपादित करें: व्याख्या करने के लिए, राइट को संचालित करने के लिए 2 तर्क - स्ट्रिंग (या स्तंभ) लेता है, और लौटने के लिए वर्णों की संख्या (स्ट्रिंग के "दाईं ओर" शुरू होती है)। LEN कॉलम डेटा की लंबाई लौटाता है, और हम चार को घटाते हैं ताकि हमारा राइट फंक्शन बाकि 4 अक्षरों को "पीछे" छोड़ दे।
आशा है कि यह समझ में आता है।
फिर से संपादित करें - मैं अभी एंड्रयू की प्रतिक्रिया पढ़ता हूं, और वह बहुत अच्छी तरह से सही ढंग से व्याख्या कर सकता है, और मुझसे गलती हो सकती है। यदि यह स्थिति है (और आप केवल doctored परिणामों के बजाय तालिका को अद्यतन करना चाहते हैं), तो आप यह कर सकते हैं:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
वह सही रास्ते पर है, लेकिन उसका समाधान 4 पात्रों को स्ट्रिंग के प्रारंभ में रखेगा , बजाय 4 वर्णों को छोड़ने के।
COL_LENGTH('MyTable', 'MyColumn')करने के बजाय समाप्त कर दिया LEN(MyColumn)क्योंकि मेरे मामले में मैं पहले n वर्णों को बाहर करना चाहता था, चाहे स्तंभ के भीतर वास्तविक सामग्री का आकार कोई भी हो, लेकिन इससे अच्छा काम किया!
Stuff(someColumn, 1, 4, '')
यह कहता है, पहले 1चरित्र की स्थिति के साथ शुरू , 4पात्रों को कुछ नहीं के साथ बदलें''
someColumnCTE या सबहेटिंग से सबसेंप्टल जैसा कुछ जटिल है, तो इसे दो बार मूल्यांकन करने की आवश्यकता नहीं है।
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 फ़ंक्शन FIFTH वर्ण से शुरू होकर, कोड 1 को नीचे ले जाता है, और CODE1 कम 4 की लंबाई के लिए जारी रहता है (वर्णों की संख्या शुरू में ही समाप्त हो जाती है)।
आप इसे SQL में भी कर सकते हैं।
substring(StudentCode,4,len(StudentCode))
वाक्य - विन्यास
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
शीर्ष उत्तर उपयुक्त नहीं है जब मूल्यों की लंबाई 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) बजाय ।
एक उदाहरण जो आपको मिलता है, जब आप "-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 में समर्थित नहीं है