View Full Version : سوال: چگونه با یک دستور sql یک فیلد عددی را خالی بگذارم
alih988
جمعه 18 مرداد 1387, 20:51 عصر
به نام خدا
با سلام و عرض ادب خدمت دوستان عزیز.
سوالی داشتم در مورد دستور sql .
فرض کنید فیلد A از نوع number است. و B از نوع string
حالا من میخواهم با یک دستور sql مقدار این فیلد را خالی بگذارم ، چه کنم ؟
insert into Table A= '' , b=s
دوستان راهنمایی کنید که فیلد A را چطور خالی بگذارم.
در ضمن در مورد در مورد جستجو هم همین اشکال را دارم .
من در مورد string به شکل like '%%' l عمل می کردم. ولی در مورد نوع عددی نمیدونم چه کار باید بکنم .
KambizZandi
جمعه 18 مرداد 1387, 21:36 عصر
منظور شما رو از خالي متوجه نشدم
اگر منظور null است ابتدا بايد فيلد مورد نظر در db بصورت nullable تعريف شود
براي تغيير فيلد به هيچي:
update tbl1 set field1=null
براي جستجوي عددي هم:
select * from tbl1 where field1=5
Morteza_s
جمعه 18 مرداد 1387, 21:54 عصر
در تکمیل گفته دوستان
فیلدهایی که می خواهید خالی بگذارید در دستور Insert وارد نکنید
INSERT INTO Table1 (B) values("ali")
برای جستجوی مقادیر عددی هم باید از یکی از عملگرهای مساوی، بزرگتر، کوچکتر، بزرگتر مساوی، کوچکتر مساوی، نامساوی و مابین دو مقدار استفاده کنید
عملگر LIKE مخصوص مقادیر String هست
ضمنآ زمانی که شما فیلدهای عددی را خالی می گذارید مقدار پیشفرض صفر در فیلد ذخیره میشه
alih988
جمعه 18 مرداد 1387, 22:12 عصر
متشکرم از شما دوستان عزیز ، راه های خوبی بود ، راستش مشکل من از اونجا شروع شد که قصد داشتم اعدادی را که به صورت string بودند را مرتب کنم که به مشکل برخوردم ، اگر لطف کنید و بگید که آیا راهای وجود داره که بشه اعداد string را مرتب کرد که دیگه کارم خیلی راحت میشه!
Morteza_s
جمعه 18 مرداد 1387, 22:25 عصر
منظورتون از مرتب کردن چیه؟
بیشتر توضیح بدید
alih988
جمعه 18 مرداد 1387, 23:08 عصر
منظور من این هستش که اگر شما اعداد 10 و 1001و14 رو از کوچک به بزرگ مرتب کنید ( این اعداد به صورت رشته ذخیره شدند) خروجی زیر داده میشه :
10
1001
14
یعنی وقتی به صورت رشته ذخیره کرده باشید کامپیوتر 1001 رو از 14 کوچکتر فرض می کنه!
من میخوام ببینم آیا راهی وجود داره که بشه اعدادی رو که در غالب رشته ذخیره شدند رو به درستی مرتب سازی کرد؟
KambizZandi
شنبه 19 مرداد 1387, 01:36 صبح
براي اينکار ميتونيد از convert يا cast استفاده کنيد که البته cost زيادي داره
select * from tbl1 order by convert(int, id)
alih988
شنبه 19 مرداد 1387, 11:06 صبح
منظور شما از اینکه cost زیادی داره چیه ؟
alih988
شنبه 19 مرداد 1387, 12:03 عصر
سلام ، ممنونم از راهنمایی شما ، ولی متاسفانه هنوز موفق نشدم.
من یک فیلد دارم به نام object_code_old از نوع استرینگ ، و دستور sql من هم دستور زیر است.
SELECT * FROM view1 order by convert(int,object_code_old)
زمانی که از این دستور استفاده می کنم پیغام زیر را به عنوان خطا نمایش می دهد ،
Undefined function 'convert' in expression
از cast هم اگر استفاده کنم پیغام زیر را می دهد
IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
چه کنم ؟
ALI TT
شنبه 19 مرداد 1387, 12:58 عصر
حالا چرا فیلد استرینگ رو نامبر نمی کنی ؟
alih988
شنبه 19 مرداد 1387, 13:38 عصر
سلام ، چون اگر همین فیلد را به نوع عددی تبدیل کنم ، باید در کل برنامه هرجا که متغیر از نوع استرینگ هست رو به عدد تبدیل کنم و امکان داره اشکال ناخواسته ای بوجود بیاد.
ابلته دلیل مهم تر اینه که اگر بتونید راهنمایی کنید میشه یه کارایی کرد .
موقعی که میخواهم جستجو کنم ، چه کار کنم که در یک فیلد عددی حتی اگر هیچ (نال) هم باشد جز نتایج بیاورد.
مثال :
select object_code old from objects where object_code_old = null
select object_code old from objects where object_code_old =''
چه دستوری رو باید بنویسم.
چون توی استرینگ این مشکل وجود نداره
select object_code old from objects where object_code_old like'%%'
دستور بالا در مورد استرینگ حتی اگر مقدار نال هم باشه اون فیلد رو سلکت می کنه اما در مورد عدد اینطور نیست
:گریه:خواهشا راهنمایی بفرمایید
alih988
شنبه 19 مرداد 1387, 16:43 عصر
پیدا کردم با تابع isnull میشه این کار رو کرد!
ALI TT
یک شنبه 20 مرداد 1387, 11:17 صبح
select object_code old from objects where object_code_old like'%%'
سلام اولا این کد زیاد مناسب نیست ، این بهتره :
SELECT Field1 [, Field2, Field3, ... ] FROM <Table Name> WHERE Field IS Null
دوما برای این که اعداد خالی رو پیدا کنید باید به بانک خودتون در Access مراجعه نمایید و ببینید مقدار Defulte Value را از فیلد نامبر چی قرار دادین . مثلا اگر 0 باشه ( که بطور پیش فرض هم همینه ) اینطوریه :
select object_code old from objects where object_code_old = 0
و اگه خال باشه یا نول :
select object_code old from objects where object_code_old IS NULL
و یا هر چیز (X)دیگه :
select object_code old from objects where object_code_old = X
KambizZandi
یک شنبه 20 مرداد 1387, 16:04 عصر
منظور شما از اینکه cost زیادی داره چیه ؟
يعني درصد زيادي از زمان پروسس رو به خودش اختصاص ميده
تو sql query کليد ctrl+L رو بزنيد تا cost رو ببينيد
KambizZandi
یک شنبه 20 مرداد 1387, 16:06 عصر
سلام ، ممنونم از راهنمایی شما ، ولی متاسفانه هنوز موفق نشدم.
من یک فیلد دارم به نام object_code_old از نوع استرینگ ، و دستور sql من هم دستور زیر است.
زمانی که از این دستور استفاده می کنم پیغام زیر را به عنوان خطا نمایش می دهد ،
Undefined function 'convert' in expression
از cast هم اگر استفاده کنم پیغام زیر را می دهد
IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
چه کنم ؟
من مثال رو با توجه به اينکه گفتيد از sql استفاده ميکنيد گفتم
احتمالا شما از ms sql server استفاده نميکنيد
چون دستورات CONVERT و CASE جزو دستورات MS SQL SERVER هستند
KambizZandi
یک شنبه 20 مرداد 1387, 16:07 عصر
براي تست کردن يک فيلد با هيچي:
where x is null
where x is not null
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.