PDA

View Full Version : تبديل يا تغيير از varchar به نوع عددي يا float



hamzehsh
چهارشنبه 27 شهریور 1392, 16:22 عصر
سلام
يك فيلد از جدول دارم كه مقاديرم رو توش نگهداري ميكنم. اين مقادير شامل عدد و كاراكتر ميشه.
وقتي select ميزنم ميخوام فقط عددهاشون رو بهم بده و يا اينكه كاراكترهاي اضافه رو حذف كنه و فقط عدد بمونه و نمايش بده.
31
4.7
77
<0.1
@578
اينها نمونه هستند.
البته من يك function نوشتم ولي درست كارنميكنه.

ALTER FUNCTION [dbo].[CastValue] (@valu float)
RETURNS float
AS
BEGIN

Declare @x varchar
Declare @y float
set @x = replace(@valu,'<>/?,`~!@#$%^&*()-_=+\|[]{}',0)
SET @y =CONVERT(float,@x)

Return @y
END

محمد سلیم آبادی
چهارشنبه 27 شهریور 1392, 16:45 عصر
http://www.dotnettips.info/post/1187/%D8%AD%D8%B0%D9%81-%D9%86%D9%85%D9%88%D8%AF%D9%86-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%87%D8%A7%DB%8C-%D9%86%D8%A7%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-recursive-cte-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84

lastmory
چهارشنبه 27 شهریور 1392, 16:46 عصر
.
وقتي select ميزنم ميخوام فقط عددهاشون رو بهم بده و يا اينكه كاراكترهاي اضافه رو حذف كنه و فقط عدد بمونه و نمايش بده.

با سلام
اگر میخوای فقط عدد ها رو بهت بده و اونایی که چیزی قاطیش شده نشون نده میتونی از ISNUMERIC استفاده کنی
اینجوری
select * from tbl1 where isnumeric(f0)=1

hamzehsh
چهارشنبه 27 شهریور 1392, 17:31 عصر
ممنون دوست من
اين تابع فقط مقادير عددي رو برميگردونه.
من ميخوام فقط عددش رو برگردونه و بقيه چيزهاش رو حذف كنه.

saeid.gh
چهارشنبه 27 شهریور 1392, 20:01 عصر
به نظر من یک جدول با ساختار tbl1 ایجاد کن به نام tbl2 و
insert into tbl2
select * from tbl1
where isnumeric(f0)=1

محمد سلیم آبادی
جمعه 29 شهریور 1392, 03:44 صبح
ما بقی کاراکتر ها رو خودتان به جدول اضافه کنید:


alter FUNCTION [dbo].[CastValue] (@valu varchar(300))
RETURNS float
AS
BEGIN

declare @t table(nbr int,c char(1))
insert @t values (1,'<'), (2,'>'), (3,'/'),
(4,','),(5,''''),(6,'~');
--'<>/?,`~!@#$%^&*()-_=+\|[]{}'

declare @c char(1), @n int = 1

while @n <= (select count(*) from @t)
begin
select @c = c from @t where nbr = @n
set @n += 1
set @valu = replace(@valu,@c,'')
end


Return @valu
END

hamzehsh
دوشنبه 01 مهر 1392, 11:31 صبح
ممنون ولي اين پيام رو ميده

Msg 170, Level 15, State 1, Procedure CastValue, Line 9
Line 9: Incorrect syntax near ','.
Msg 139, Level 15, State 1, Procedure CastValue, Line 13
Cannot assign a default value to a local variable.
Msg 137, Level 15, State 2, Procedure CastValue, Line 15
Must declare the variable '@n'.
Msg 137, Level 15, State 2, Procedure CastValue, Line 17
Must declare the variable '@n'.

فكر ميكنم اون اينزرت يكجاييش درست نيست