PDA

View Full Version : سوال: 9 كاركتر است قبلش يك صفر قرار دهد



ali_abbasi22145
دوشنبه 27 خرداد 1387, 16:08 عصر
سلام
1-كدملي بدون داش 10 كاركتر است من مي خواهم كدملي هايي كه 9 كاركتر است قبلش يك صفر و كدملي هايي كه 9 كاركتر است قبلش 2 صفر قرار دهد.
مثال 9 كاركتر : 987654321 تبديل كند به 0987654321
مثال 8 كاركتر : 87654321 تبديل كند به 0087654321

2- بانكي دارم كه تمام شماره كارمندهايش به شكل AHB123468 , AHB123456 , AHB123466 و.. كه AHB در اولش اضافي است بردارد و تبديل كند به: 123468 , 123456 , 123466 و..

رضا عربلو
دوشنبه 27 خرداد 1387, 16:29 عصر
1 -

RIGHT('00'+CodeMeli, 10)

2-

Cast(RIGHT(PersonnelNumber, LEN(PersonnelNumber)-3) as INT)

ali_abbasi22145
سه شنبه 28 خرداد 1387, 10:50 صبح
سلام
با تشكر از دوستمان كد كامل تست شده را اينجا مي گذارم:

-- (Tested) correct code-meli with 8 and 9 digits
UPDATE CardTable
SET employee_number = RIGHT('00'+employee_number, 10)
WHERE ( LEN(LTRIM(RTRIM(employee_number))) = 8 )

UPDATE CardTable
SET employee_number = RIGHT('0'+employee_number, 10)
WHERE ( LEN(LTRIM(RTRIM(employee_number))) = 9 )

-- (Tested) Remove 'AHB' from AHB123468 , AHB123456 , AHB123466
UPDATE CardTable
SET employee_number =
Cast(RIGHT(employee_number, LEN(employee_number)-3) as INT)

ali_abbasi22145
سه شنبه 28 خرداد 1387, 11:10 صبح
سلام
مشكل حذف AHB در ابتدا كاملا حل شد ، حال اگر AHB در اول نباشد يعني به صورت wdAHB142d,abAHB14555,22weAHB يعني در هرجاي دلخواه فيلد باشد راه حل چيست؟

رضا عربلو
سه شنبه 28 خرداد 1387, 17:28 عصر
برای حذف از تابع replace استفاده کنید.


replace(PerosnnelNumber, 'AHB', '')

mortezakiaee
سه شنبه 28 خرداد 1387, 19:04 عصر
نمی دونم مربوطه یا نه ولی برای اضافه کردن چی؟
مثال:
یه فیلد داریم که توش تاریخ به صورت رشته ذخیره شده حالا می خوایم رشته های 87/01/1 و 87/3/4 رو به این شکل در بیاریم 87/01/01 و 87/03/04

رضا عربلو
سه شنبه 28 خرداد 1387, 19:35 عصر
از substring استفاده کن

mortezakiaee
سه شنبه 28 خرداد 1387, 19:55 عصر
راستش راحت تر این کارو کردم. ممنون از راهنماییتون


UPDATE TABLE
SET FIELD=STUFF(FIELD,4,0,'0')
WHERE SUBSTRING(FIELD,4,2) LIKE '%/'
GO
UPDATE TABLE
SET FIELD=STUFF(FIELD,7,0,'0')
WHERE (SUBSTRING(FIELD,6,3) LIKE '/%') AND(LEN(SUBSTRING(FIELD,6,3))=2)

ali_abbasi22145
شنبه 01 تیر 1387, 11:21 صبح
سلام و تشكر از دوستمان
و اين كاملش:
-- (Tested) Remove AHB anywhere (AHB123468 , wdAHB142d , abAHB14555 , 22weAHB)
UPDATE CardTable
SET employee_number = replace(employee_number, 'AHB', '')

NewFoxStudent
شنبه 01 تیر 1387, 13:07 عصر
توابع Padleft , PadRight این کار را انجام میدهد


Create Function PadRight(@cStr as nVarchar(250),@cLen as Int,@PadStr as nVarchar(250))
Returns nVarchar(250)
as
Begin
Declare @nTime as Int,@RetVal as nVarchar(250)
Set @nTime = @cLen - Len(@cStr)
Set @retVal = @cStr + Space(@nTime)
Return Replace(@retVal,' ',@PadStr)
End

Create Function PadLeft(@cStr as nVarchar(250),@cLen as Int,@PadStr as nVarchar(250))
Returns nVarchar(250)
as
Begin
Declare @nTime as Int,@RetVal as nVarchar(250)
Set @nTime = @cLen - Len(@cStr)
Set @retVal = Space(@nTime)+@cStr
Return Replace(@retVal,' ',@PadStr)
End

NewFoxStudent
شنبه 01 تیر 1387, 13:10 عصر
پارامتر اول رشته مورد نظر
کاراکتر دوم طولی که میخوای رشته بعد از اضافه شدن کاراکتر داشته باشه
پارامتر سوم کاراکتری که میخوای به چپ یا راست رشته اضافه بشه


Select dbo.PadLeft('987654321',10,'0')