هل يمكنني الحصول على قائمة بالصفوف التي تحتوي على قيم varchar غير قابلة للبملية إلى DateTime؟
-
10-09-2019 - |
سؤال
لدي قاعدة بيانات 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 ...
هل هناك أي طريقة أستطيع:
- احصل على قائمة بجميع الصفوف حيث لا يمكن إلقاء Birthdateate في تاريخ في حالة إصلاحه؟
- في الحالات التي لا يمكنني فيها إصلاح القيمة، اجعل القيمة تظهر أنها فارغة أو ربما حتى شيء من الواضح ليس تاريخ الميلاد الحقيقي للمستخدم؟
المحلول
يستخدم 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 ...
نصائح أخرى
افحص ال T-SQL ISDate () وظيفة
إظهار الصفوف السيئة:
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 ...
لا تنتمي إلى StackOverflow