PDA

View Full Version : سوال: چگونه با یک دستور sql یک فیلد عددی را خالی بگذارم



alih988
جمعه 18 مرداد 1387, 19:51 عصر
به نام خدا

با سلام و عرض ادب خدمت دوستان عزیز.

سوالی داشتم در مورد دستور sql .
فرض کنید فیلد A از نوع number است. و B از نوع string

حالا من میخواهم با یک دستور sql مقدار این فیلد را خالی بگذارم ، چه کنم ؟

insert into Table A= '' , b=s

دوستان راهنمایی کنید که فیلد A را چطور خالی بگذارم.

در ضمن در مورد در مورد جستجو هم همین اشکال را دارم .
من در مورد string به شکل like '%%' l عمل می کردم. ولی در مورد نوع عددی نمیدونم چه کار باید بکنم .

KambizZandi
جمعه 18 مرداد 1387, 20:36 عصر
منظور شما رو از خالي متوجه نشدم
اگر منظور null است ابتدا بايد فيلد مورد نظر در db بصورت nullable تعريف شود
براي تغيير فيلد به هيچي:


update tbl1 set field1=null

براي جستجوي عددي هم:


select * from tbl1 where field1=5

Morteza_s
جمعه 18 مرداد 1387, 20:54 عصر
در تکمیل گفته دوستان

فیلدهایی که می خواهید خالی بگذارید در دستور Insert وارد نکنید


INSERT INTO Table1 (B) values("ali")


برای جستجوی مقادیر عددی هم باید از یکی از عملگرهای مساوی، بزرگتر، کوچکتر، بزرگتر مساوی، کوچکتر مساوی، نامساوی و مابین دو مقدار استفاده کنید
عملگر LIKE مخصوص مقادیر String هست

ضمنآ زمانی که شما فیلدهای عددی را خالی می گذارید مقدار پیشفرض صفر در فیلد ذخیره میشه

alih988
جمعه 18 مرداد 1387, 21:12 عصر
متشکرم از شما دوستان عزیز ، راه های خوبی بود ، راستش مشکل من از اونجا شروع شد که قصد داشتم اعدادی را که به صورت string بودند را مرتب کنم که به مشکل برخوردم ، اگر لطف کنید و بگید که آیا راهای وجود داره که بشه اعداد string را مرتب کرد که دیگه کارم خیلی راحت میشه!

Morteza_s
جمعه 18 مرداد 1387, 21:25 عصر
منظورتون از مرتب کردن چیه؟
بیشتر توضیح بدید

alih988
جمعه 18 مرداد 1387, 22:08 عصر
منظور من این هستش که اگر شما اعداد 10 و 1001و14 رو از کوچک به بزرگ مرتب کنید ( این اعداد به صورت رشته ذخیره شدند) خروجی زیر داده میشه :

10
1001
14

یعنی وقتی به صورت رشته ذخیره کرده باشید کامپیوتر 1001 رو از 14 کوچکتر فرض می کنه!

من میخوام ببینم آیا راهی وجود داره که بشه اعدادی رو که در غالب رشته ذخیره شدند رو به درستی مرتب سازی کرد؟

KambizZandi
شنبه 19 مرداد 1387, 00:36 صبح
براي اينکار ميتونيد از convert يا cast استفاده کنيد که البته cost زيادي داره

select * from tbl1 order by convert(int, id)

alih988
شنبه 19 مرداد 1387, 10:06 صبح
منظور شما از اینکه cost زیادی داره چیه ؟

alih988
شنبه 19 مرداد 1387, 11: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, 11:58 صبح
حالا چرا فیلد استرینگ رو نامبر نمی کنی ؟

alih988
شنبه 19 مرداد 1387, 12: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, 15:43 عصر
پیدا کردم با تابع isnull میشه این کار رو کرد!

ALI TT
یک شنبه 20 مرداد 1387, 10: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, 15:04 عصر
منظور شما از اینکه cost زیادی داره چیه ؟

يعني درصد زيادي از زمان پروسس رو به خودش اختصاص ميده
تو sql query کليد ctrl+L رو بزنيد تا cost رو ببينيد

KambizZandi
یک شنبه 20 مرداد 1387, 15: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, 15:07 عصر
براي تست کردن يک فيلد با هيچي:
where x is null
where x is not null