This is a discussion on Help needed for datediff function for SQL query within the SQL Server forums, part of the Microsoft SQL Server category; --> Hi Experts, I am working on SSRS 2005, and I am facing a problem in counting the no of ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hi Experts, I am working on SSRS 2005, and I am facing a problem in counting the no of days. My database has many fields but here I am using only two fields They are Placement_Date and Discharge_Date If child is not descharged then Discharge_Date field is empty. I am writing below query to count the number of days but is is not working it is showing the error "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value." select case when convert(datetime,Discharge_Date,103) = '' then datediff(day,CONVERT(datetime,Placement_Date,103), GETDATE()) else datediff(day,CONVERT(datetime,Placement_Date, 103),CONVERT(datetime,Discharge_Date,103)) end NoOfDays from Placement_Details So please tell me where I am wrong? Any help will be appriciated. Regards Dinesh |
| |||
| Without having your table structure and sample data, it is a bit difficult to troubleshoot, but a few notes that can help you: - Based on the style 103 that you use for the CONVERT function, seems you are converting date stored as string in format "dd/mm/yyyy" to a datetime type. The error that you get indicates that the date string cannot be converted, because the day, month, or year portion is out of the allowed range. You can easily simulate the error if you run something like this: SELECT CONVERT(datetime, '23/13/2007', 103). The month cannot be 13 so it fails with the error you get. You can use the LEFT, RIGHT and SUBSTRING functions to extract the day, month, and year portion of both columns (Placement_Date and Discharge_Date) and check for invalid values, then clean your data. For year the down side value is 1753 (that is the lower limit for datetime data type). - It is always best to keep date values in columns of datetime data type. That way you do not have to worry about the format and can benefit of using all datetime functions with no need to convert. HTH, Plamen Ratchev http://www.SQLStudio.com |
| |||
| Dinesh (dinesht15@gmail.com) writes: > I am working on SSRS 2005, and I am facing a problem in counting the > no of days. > My database has many fields but here I am using only two fields > They are Placement_Date and Discharge_Date > If child is not descharged then Discharge_Date field is empty. > > I am writing below query to count the number of days but is is not > working it is showing the error > "The conversion of a char data type to a datetime data type resulted > in an out-of-range datetime value." > > select case > when convert(datetime,Discharge_Date,103) = '' then This does not really make sense. A datetime value cannot be the empty string. By the default the empty string will convert to the datetime value 1900-01-01 00:00:00.000, but I don't think that is what you want. Assuming a reasonably designed database, the test would be WHEN Discharge_Date IS NULL THEN Then again, since you seem to store dates in character values, this may not be a reasonably designed database. :-) Anyway, the problem appears to be that you have junk in your character columns. As Plamen said, you should use the datetime data type to store your dates instead. -- Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se Books Online for SQL Server 2005 at http://www.microsoft.com/technet/pro...ads/books.mspx Books Online for SQL Server 2000 at http://www.microsoft.com/sql/prodinf...ons/books.mspx |
| ||||
| Dinesh (dinesht15@gmail.com) writes: > I am working on SSRS 2005, and I am facing a problem in counting the > no of days. > My database has many fields but here I am using only two fields > They are Placement_Date and Discharge_Date > If child is not descharged then Discharge_Date field is empty. > > I am writing below query to count the number of days but is is not > working it is showing the error > "The conversion of a char data type to a datetime data type resulted > in an out-of-range datetime value." > > select case > when convert(datetime,Discharge_Date,103) = '' then > datediff(day,CONVERT(datetime,Placement_Date,103), GETDATE()) > else > datediff(day,CONVERT(datetime,Placement_Date, > 103),CONVERT(datetime,Discharge_Date,103)) > end NoOfDays > from Placement_Details > So please tell me where I am wrong? Oh, by the way, this SELECT should give you the rows with bad dates: SET DATEFORMAT DMY go SELECT Discharge_Date, Placement_Date FROM Placement_Details WHERE isdate(Discharge_Date) = 0 OR isdate(Placement_Date) = 0 -- Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se Books Online for SQL Server 2005 at http://www.microsoft.com/technet/pro...ads/books.mspx Books Online for SQL Server 2000 at http://www.microsoft.com/sql/prodinf...ons/books.mspx |