هل يمكنني الحصول على قائمة بالصفوف التي تحتوي على قيم varchar غير قابلة للبملية إلى DateTime؟

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

سؤال

لدي قاعدة بيانات Legacy SQL Server 2000 تحتوي على عمود واحد يحتوي على موعد يتم تخزينه مثل Varchar بدلا من DateTime لأي سبب من الأسباب. أرغب في عرض هذه البيانات واستخدام حقل DateTime بدلا من varchar لإجراء تقرير مقابل الحقل أسهل. الأخبار الجيدة هي ذلك عظم من القيم تبدو وكأنها يجب أن تكون قادرة على الإدلاء مباشرة في تاريخ التاريخ.

بالطبع، على ما يبدو هناك بعض الحقول التي تم إدخالها بطريقة غير قابلة للبملية إلى DateTime. فقط من أجل الوضوح، إليك كيف يمكن أن ينظر الجدول:

CREATE TABLE dbo.user
(
    ...
    birthdate varchar(10)
    ...
)

ويمكن أن تبدو الرأي شيئا مثل هذا:

CREATE VIEW dbo.UserView
AS
SELECT ...
       CAST(u.birthdate AS datetime) AS birthdate
       ...
FROM user u
WHERE ...

هل هناك أي طريقة أستطيع:

  1. احصل على قائمة بجميع الصفوف حيث لا يمكن إلقاء Birthdateate في تاريخ في حالة إصلاحه؟
  2. في الحالات التي لا يمكنني فيها إصلاح القيمة، اجعل القيمة تظهر أنها فارغة أو ربما حتى شيء من الواضح ليس تاريخ الميلاد الحقيقي للمستخدم؟
هل كانت مفيدة؟

المحلول

يستخدم isdate ()

SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1

و

SELECT ...
   CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
   ...
FROM user u
WHERE ...

نصائح أخرى

إظهار الصفوف السيئة:

select * from dbo.user where isdate(birthdate)!=1

وجهة نظركم:

SELECT ...
    CASE
        WHEN isdate(birthdate)=1 THEN CAST(u.birthdate AS datetime)
        ELSE NULL
    END AS Birthday
       ...
FROM user u
WHERE ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top