আমি কীভাবে কোনও সারণীতে নির্দিষ্ট কলামের প্রথম অক্ষরগুলি সরিয়ে ফেলব?


162

এসকিউএল-এ, আমি কীভাবে কোনও সারণীতে নির্দিষ্ট কলামের মানগুলির প্রথম 4 টি অক্ষর মুছব? কলামের নাম Student Codeএবং একটি উদাহরণ মান ABCD123Stu1231। আমি সমস্ত রেকর্ডের জন্য আমার টেবিল থেকে প্রথম 4 টি অক্ষর মুছতে চাই

আমাকে গাইড করুন

উত্তর:


259
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn

সম্পাদনা: ব্যাখ্যা করতে, ডানদিকে 2 টি আর্গুমেন্ট লাগে - স্ট্রিং (বা কলাম) চালাতে, এবং অক্ষরের সংখ্যা ফিরে (স্ট্রিংয়ের "ডানদিকে" শুরু করে)। LEN কলামের ডেটার দৈর্ঘ্য ফিরিয়ে দেয় এবং আমরা চারটি বিয়োগ করি যাতে আমাদের রাইট ফাংশনটি বামদিকে 4 অক্ষর "পিছনে" ফেলে দেয়।

আশা করি এটি উপলব্ধিযোগ্য।

আবার সম্পাদনা করুন - আমি কেবল অ্যান্ড্রুয়ের প্রতিক্রিয়াটি পড়েছি এবং সে খুব ভালভাবেই সঠিকভাবে ইন্টারপ্রেস করেছে এবং আমার ভুল হতে পারে। যদি এটি হয় (এবং আপনি কেবল ডক্টরেটেড ফলাফলগুলি না দিয়ে টেবিলটি আপডেট করতে চান), আপনি এটি করতে পারেন:

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)

তিনি ডান ট্র্যাক উপর, কিন্তু তার সমাধান করতে হবে রাখা স্ট্রিং শুরুতে 4 অক্ষর, বাতিল বদলে 4 অক্ষর বলেন।


9
এটি <4 টি অক্ষরের সাথে মানগুলির জন্য ব্যর্থ হবে। <4
স্কট আইভে

2
এটি হ্যান্ডেল করার সম্ভাব্য সর্বোত্তম উপায়টি হ'ল: MyTableSET মাইকালোমাম = রাইট (মাইক্রোম, লেন (মাই কলাম) - 4) যেখানে লেন (মাই কলাম)> 4 সাবস্ক্রটিং ত্রুটিযুক্ত হবে না, তবে এটি অকারণে "আপডেট" সারিগুলিও করবে চারটিরও কম অক্ষরের সাথে। এটি বলে যে, ওপি ইঙ্গিত করেছে যে তারা একটি নির্দিষ্ট কলামের প্রথম 4 টি অক্ষর ছাঁটাই করতে চেয়েছিল - আমি ধরে নেব যতক্ষণ না সমস্ত সারি ছাঁটাই করা দরকার তার অধিক বিশদ বিবরণ না দিয়ে।
অ্যারন অ্যালটন

1
@ স্পেনসার 7593 - হাহাহাহা ... সত্য। আপনি সর্বদা সুরক্ষিত থাকার জন্য যেখানে একটি বিধি যুক্ত করতে পারেন: যেখানে অসঙ্গতি নেই (বামে (মাই কলাম, 1))
অ্যারন অ্যালটন

এটি কি কোনও নুল কলামে কল করা নিরাপদ? এই ক্ষেত্রে হবে?
ইয়ান আর ও'ব্রায়েন

COL_LENGTH('MyTable', 'MyColumn')পরিবর্তে আমি ব্যবহারটি শেষ করেছি LEN(MyColumn)কারণ আমার ক্ষেত্রে আমি কলামের মধ্যে প্রকৃত সামগ্রীর আকার বিবেচনা না করেই প্রথম এন অক্ষরগুলি বাদ দিতে চেয়েছি, তবে এটি ব্যতীত অন্যভাবে কাজ করেছে!
sfarbota

86
Stuff(someColumn, 1, 4, '')

এটি বলছে, প্রথম 1অক্ষরের অবস্থানের সাথে শুরু করে , 4অক্ষরগুলিকে কিছুই না করে প্রতিস্থাপন করুন''


7
পুরানো প্রশ্ন আমি জানি, তবে আমি এই সমাধানটি পছন্দ করি, কারণ এটি 1 টি বেশি ফাংশন ব্যবহার করে না বা এতে কিছু এলোমেলো সংখ্যক সংখ্যা নেই।
এডউইন স্টোটার 26

4
আরও বেশি: যদি someColumnকোনও সিটিই থেকে সাবলেট বা কোনওরকম কিছু করার মতো জটিল কিছু হয় তবে এটির জন্য এটি দুটিবার মূল্যায়নের প্রয়োজন হয় না।
জেফ

1
এফওয়াইআই, এই সমাধানটি সংখ্যাসূচক মানগুলি ছাঁটাই করার জন্যও খুব ভাল কাজ করে।
স্টিভেন বল

1
আপনি যা বলেছেন তা বাড়িয়ে তোলার জন্য, এখানে একটি সম্পূর্ণ ফলাফল। প্রথমে একটি নির্বাচন করুন, আপনার পছন্দসই সারিগুলি নিশ্চিত হওয়া নিশ্চিত করুন এবং তারপরে এই আপডেটে এটি পান। দ্রষ্টব্য / সতর্কতা - এটি সফলভাবে সঞ্চালনের পরে এটি আবার চালাবেন না, কারণ এটি নির্বিচারে প্রথম 4 টি অক্ষর কেটে দেয়: আপডেট টেবিল সেট টেক্সটফিল্ড = (নির্বাচন করুন STUFF (কনভার্ট (ভারচার (ম্যাক্স), টেক্সটফিল্ড), 1, 4, '')) যেখানে অ্যাক্টিভিটি টাইপ = 'এ' এবং অনুমোদিত তারিখ> '2017-06-30' এবং টেক্সটফিল্ড '% দ্য কাউন্টি 1%' পছন্দ করেন না এবং টেক্সটফিল্ড '% দ্য কাউন্টি 2%' পছন্দ করেন না এবং অ্যাবস্ট্রাক্ট '% দ্য কাউন্টি 3%' এর মতো নয়) এবং এতে ক্রিয়াকলাপ (12345, ... আইডির পরিসর ... 56789)
ডিসি পারহাম

33

আপনার কেন দুটি স্ট্রিং ফাংশন রয়েছে তাই কেন LEN ব্যবহার করবেন? আপনার যা দরকার তা হ'ল অক্ষর 5 টি ...

...SUBSTRING (Code1, 5, 8000)...

1
এই ভবিষ্যতের প্রমাণ? এমএসএসকিউএল এর ভবিষ্যতের সংস্করণগুলি 8,000 এর চেয়েও বেশি বড় বার্চারের আকার ব্যবহার করতে পারে?
বিকাশকারী ওয়েবসাইট 14

3
ভারচার (সর্বোচ্চ) ইতিমধ্যে 8000 টি অক্ষরের চেয়ে বড়। যদি আপনি লেন (কলাম)
রাখেন

2
অথবা কেবল 2000000000 ব্যবহার করুন Why কেন একটি লেন ফাংশন যুক্ত করুন। কোনও মূল্য যুক্ত করে না এবং পিছনে স্থানগুলিও উপেক্ষা করে (যদি আপনি এটি চান)
gbn

1
ধন্যবাদ, এটি আমার জন্য একত্রী জিনিস হিসাবে ভাল কাজ করেছে। গৃহীত উত্তরটি ছিল কিছু কারণে অতিরিক্ত অক্ষরগুলি কাটা কারণ, তবে এটি নির্দোষভাবে কাজ করে।
ব্যবহারকারী 2366842

2
@ ব্যবহারকারী 2366842 সম্ভবত স্বীকৃত উত্তরটি অতিরিক্ত অক্ষরগুলি কেটে ফেলার কারণ হ'ল আপনার পাঠ্যে সম্ভবত পিছনের জায়গাগুলি ছিল। আপনি চাইলে আরটিআরআইএম এবং এলটিআরআইএম ব্যবহার করে ক্ষতিপূরণ দিতে পারেন।
স্পাজমুজ


7

আপনি যা করার চেষ্টা করছেন তার একটি সাধারণ উপহাস এখানে রইল :)

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)

সুতরাং, আপনি যে ক্ষেত্রটি ছাঁটাতে চান তার বিপরীতে সর্বশেষ বিবৃতিটি ব্যবহার করুন :)

সাবস্ট্রাকশন ফাংশনটি কোড 1 টি ছাঁটাই করে, ফিফথ অক্ষর থেকে শুরু করে, এবং CODE1 কম 4 এর দৈর্ঘ্যের জন্য অবিরত থাকবে (শুরুতে বাদ দেওয়া অক্ষরের সংখ্যা)।


5

সম্পূর্ণ জিনিস

DECLARE @v varchar(10)

SET @v='#temp'

select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'

3

আপনি এসকিউএল এ এটি করতে পারেন ..

substring(StudentCode,4,len(StudentCode))

বাক্য গঠন

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)

3

এটা চেষ্টা কর. 100% কাজ করছে

UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)

  


3

মানগুলির দৈর্ঘ্য 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                           

1
আপনি কোন ডাটাবেস ব্যবহার করবেন? প্রশ্নটিতে tsql ট্যাগ রয়েছে, তবে টি-এসকিউএল নেতিবাচক পরামিতিগুলিকে অনুমতি দেয় না। আমি ত্রুটির বার্তা পেয়েছি "অবৈধ দৈর্ঘ্যের প্যারামিটারটি সঠিক ফাংশনে দিয়ে গেছে।"
পালোটা

আমি ট্যাগগুলি লক্ষ্য করিনি। উত্তর টি-এসকিউএল এবং পোস্টগ্রিস বিভাগে বিভক্ত করুন। ধন্যবাদ.
নুমেনন

2

অন্তর্নির্মিত ট্রিম ফাংশন রয়েছে যা উদ্দেশ্যটির জন্য উপযুক্ত।

SELECT trim(both 'ag' from 'asdfg');
btrim 
-------
 sdf
(1 riga)

http://www.postgresql.org/docs/8.1/static/functions-string.html


1
এটি পোস্টগ্রিজএসকিউএল ব্যবহারকারীদের জন্য কার্যকর হতে পারে, প্রশ্নটি ট্যাগগুলিতে ওপি tsql / sQL-server উল্লেখ করেছে।
CodeMonkey131313


1

আপনার যদি বিশেষ কয়েকটি চরিত্রের আগে প্রথম কয়েকটি অক্ষর অপসারণ করতে হয় তবে এটি #ভাল:

UPDATE tblInvalidID
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ') 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.