كيف يمكنني استخدام حقل منطقي في جملة أين في sqlite؟

StackOverflow https://stackoverflow.com/questions/580668

  •  06-09-2019
  •  | 
  •  

سؤال

يبدو أن سؤال غبي، وحتى الآن. يمكن أن يكون بيئتي IDE. إليك الرمز (يتم إنشاء هذا من DBLINQ):

SELECT  pics$.Caption, pics$.Id, pics$.Path, pics$.Public, pics$.Active, portpics$.PortfolioID
FROM main.Pictures pics$
inner join main.PortfolioPictures portpics$    on  pics$.Id = portpics$.PictureId

WHERE   portpics$.PortfolioId = 1 AND pics$.Id > 0
--AND pics$.Active = 1 AND pics$.Public = 1
ORDER BY pics$.Id

إذا قمت بتشغيل هذا الاستعلام، أحصل على ثلاثة صفوف مرة أخرى، مع وجود حقليين منطقيين يسمى نشطا وعامة. إضافة في الخط المعلق إرجاع أي صفوف. تغيير الخط إلى أي مما يلي:

pics$.Active = 'TRUE'
pics$.Active = 't' 
pics$.Active =  boolean(1)

لا يعمل. إما أخطاء أو لا توجد نتائج. لقد غوتشن لهذا وجد ندرة لاستفسارات SQL الفعلية هناك. ونحن هنا.

لذلك: كيف يمكنني استخدام حقل منطقي في جملة أين في sqlite؟

IDE هو المسؤول sqlite.

تحديث: حسنا، لقد وجدت الجواب. سيتيح لك مسؤول SQLite تعويض الأنواع الخاصة بك على ما يبدو؛ إنشاء SQL CREATE الذي يتم إنشاؤه يشبه هذا:

CREATE TABLE [Pictures] ([Id] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
[Path] VARCHAR(50)  UNIQUE NOT NULL,[Caption] varchAR(50)  NULL,
[Public] BOOLEAN DEFAULT '0' NOT NULL,[Active] BOOLEAN DEFAULT '1' NOT NULL)

الإصلاح للاستعلام هو

AND pics$.Active = 'Y' AND pics$.Public = 'Y'

القضية الحقيقية هنا هي، كما أشار أول جواد، لا يوجد نوع منطقية في SQLite. ليست مشكلة، ولكن شيء يجب أن يدركه. أنا استخدم dblinq. لتوليد طبقة البيانات الخاصة بي؛ ربما لا ينبغي أن تسمح بعملية رسم الخرائط التي لا تدعمها SQLite. أو يجب تعيين جميع الأنواع التي ليست أصلية إلى SQLite لنوع السلسلة.

هل كانت مفيدة؟

المحلول

SQLite لا يملك النوع المنطقي: ما هي أدوات البيانات التي يدعمها sqlite؟

يجب أن يعمل الخط المعلق كما هو الحال، استخدم القيم العدد الصحيحة من 1 و 0 في بياناتك لتمثيل منطقي.

نصائح أخرى

لا تحتاج إلى استخدام أي مشغل مقارنة من أجل مقارنة قيمة منطقية في جملة حيث الخاص بك.

إذا تم تسمية عمود "المنطقي" الخاص بك IS_SELISTABLE، فسيكون جملة أين ببساطة: WHERE is_selectable

لا يوجد لدى SQLite نوع من النوع المنطقي المدمج - عليك استخدام عدد صحيح بدلا من ذلك. أيضا، عند مقارنة القيمة "True" و "T"، فأنت تقارنها بتلك القيم كسلاسل، وليس كمنطاقات منطقية أو أعداد صحيحة، وبالتالي فستفشل المقارنة دائما.

مصدر: http://www.sqlite.org/datatype3.html.

-> هذا سوف يمنحك النتيجة وجود قيمة خاطئة للحقل IS_ONLINE

حدد * من device_master حيث is_online! = 1

-> هذا سوف يمنحك النتيجة ذات قيمة حقيقية للحقل IS_ONLINE

حدد * من device_master حيث is_online = 1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top