T-SQL computed date column - sql

I have a table, in TSQL, with a field containing data in YYYYMMDD format saved as varchar(50);
I want to add a date type column to the table for each of the corresponding records in this field.
Any ideas?

Assuming that you have stored correct format of date in your field (eg you don't have '20121433'), this script should works for you:
ALTER TABLE your_table
ADD your_field_Date DATETIME
UPDATE your_table
SET your_field_Date = CONVERT(DATETIME, your_field_varchar, 112)
ALTER TABLE your_table DROP COLUMN your_field_varchar

Related

Convert entire column from integer to datetime using SQL

I have a table with an entire column that contains integers. I know that these integers were previously datetime values. I want to update all values in this column to be datetimes. There are 1000+ plus rows. I've altered this column from an INT to varchar since all the errors I received didn't like me going from an INT to DATETIME but I am having the same issue with the varchar data type.
Example values in the column: 43873, 40706, 43873, ect
I have tried the following queries:
UPDATE WORKER SET INT_TIME = DATEFROMPARTS(INT_TIME,1,1);
UPDATE WORKER SET INT_TIME = CONVERT(datetime,INT_TIME,107);
I receive errors like
Conversion failed when converting date and/or time from character
string.
INT_TIME is the column I am trying to update all values to a datetime:
These look like Excel format. That suggests something like:
select dateadd(day, col, '1899-12-30')
ALTER TABLE [dbo].[WORKER]
ALTER COLUMN [INT_TIME] DATETIME
This statement alters the integer column to a datetime column and parses the values automatically.
You can use dateadd() function :
select dateadd(day, t.int_time, 0) as joining_date
from tabel t;
You can use update statement to update , before that you need to alter table definition also :
alter table worker
alter column int_time DATETIME
update worker
set int_time = dateadd(day, t.int_time, 0)
0 have a default date 1900-01-01 00:00:00.000

How to return date format (f.e. mm/dd/yyyy) from a date (f.e. 06/30/2019)?

I'm working on data validation in the SQL Server Database.
I need to check if dates in the Table are populated in a valid format for specified Country.
Is there any function in SQL that will return a date format from a date?
For example: Date: 06/30/2019 What I need to get: mm/dd/yyyy
Thanks!
As we've all mentioned in the comments, storing a date as a varchar in the database is the wrong idea. We also now know that all dates need to be the last day of the month (from the comments), so now we do have something to work with. Therefore, you could fix your table with something like the below:
--Create a new column to store old values
ALTER TABLE YourTable ADD DateString varchar(10);
--Update the new column and change the existing column to ISO (yyyyMMdd) format
UPDATE YourTable
SET DateSting = DateColumn,
DateColumn = TRY_CONVERT(varchar(10), TRY_CONVERT(date, DateColumn, 101), 112);
--Change the data type of the datecolumn
ALTER TABLE YourTable ALTER COLUMN DateColumn date;
--Inspect "lost" data:
SELECT DateString
FROM YourTable
WHERE DateColumn IS NULL
AND DateString IS NOT NULL;
GO
--Add the CHECK CONSTRAINT
ALTER TABLE YourTable
ADD CONSTRAINT Date_EOMonth CHECK (DateColumn = EOMONTH(DateColumn));
If the CHECK CONSTRAINT fails to be created you have dates that aren't at the end of the month, so you can use the below statement to inspect them, or the statement after to update them all to the end of the month:
SELECT DateColumn
FROM YourTable
WHERE DateColumn != EOMONTH(DateColumn);
--Blanket Update
UPDATE YourTable
SET DateColumn = EOMONTH(DateColumn);

SQL Server: best way to insert "mm/dd/yyyy" into a "date" or "datatime2" column?

I have a bunch of values in the form of mm/dd/yyyy stored in a CSV. An example is 06/26/2017. What I found was that I could NOT insert it into a column declared as date or datetime2 type. What I CAN do is to modify that (empty) column to varchar first, then insert.
However at this point, after insertion as varchars, how can I convert this column to "date" or "datatime2"?
Attempting to set system-wide format doesn't work:
sql> SET DATEFORMAT 'mm/dd/yyyy'
[2019-03-31 09:42:04] [S0001][2741] SET DATEFORMAT date order 'mm/dd/yyyy' is invalid.
If the column's data type is date then convert the string to date with:
convert(date, '03/31/2019', 101)
and then insert it.
See the demo.
Read more about convert()
Edit:
Create a varchar column and a date column. Insert the values inside the varchar column and when the process finishes, update the date column by converting each value to a date, like:
UPDATE tablename
SET datecolumn = convert(date, varcharcolumn, 101)
After that you can remove the varchar column.

Convert varchar column to date

I have one column LogDate which is varchar(2000) type. I want this column as date type. Current table format 2014-03-31 09:13:03.000.
How can I do that?
I presume you are using SQL Server:
declare #LogDate varchar(2000)
set #LogDate = '2014-03-31 09:13:03.000'
select convert (datetime, #LogDate, 21)
Full table query at: http://sqlfiddle.com/#!3/58a3f/1/0
If all the records in the table having data in correct format(i.e all are date only, no characters) then you can directly alter the column data type to DATE type:
ALTER TABLE <table name> ALTER COLUMN LogDate date

Converting Varchar into Date in data type

I am relatively new to SQL Server so I was wondering how to convert the data type from varchar to date format? I have a few thousands records so I need a query to help to convert the varchar to date in a single query.
I have the date in this format: yyyymmdd, in varchar(8) and I want to convert this into yyyymmdd, in date format.
Is there any queries to help me with this?
For various conversions between VARCHAR and DATETIME have a look at this link.
Actually in your case, since your VARCHAR is in yyyymmdd format, you could just:
convert(datetime, YourVarcharDateField, 112)
Simply Use this Inbuilt CONVERT Function, and Check this Link for formatting Dates
-- Use 101 if you have divider in your date
SELECT convert(datetime, '2014-01-02',101) as [DateTime]
-- Use 112 if you don't have divider in your date
SELECT convert(datetime, '20140131',112) as [DateTime]
Edited:
UPDATE yourTable SET field = convert(datetime, 'yourFieldName',112)
--This will update all of your field regardless of any particular row
--If you want to update any particular set of rows use `WHERE` clause
if you have more various formats goto to the given link.
Data types can be converted either implicitly or explicitly.
Implicit conversions are not visible to the user. SQL Server automatically converts the data from one data type to another. For example, when a smallint is compared to an int, the smallint is implicitly converted to int before the comparison proceeds.
Explicit conversions use the CAST or CONVERT functions.
The CAST and CONVERT functions convert a value (a local variable, a column, or another expression) from one data type to another
convert(datetime, '2013-05-04',101)
CAST ( expression AS data_type )
ALTER TABLE [dbo].[table] ADD ConvertedDate Date
UPDATE [dbo].[SysData] SET ConvertedDate = CAST(VarCharDate as Date)
ALTER TABLE [dbo].[table] DROP COLUMN VarCharDate
Use CAST OR CONVERT function to convert string to date
Try this:
SELECT CAST('20140102' AS DATE) AS convertedDate;
SELECT CAST(colName AS DATE) AS convertedDate FROM tableA; -- Replace column name and table name
OR
SELECT CONVERT(DATE, '20140102', 112) AS convertedDate;
SELECT CONVERT(DATE, colName, 112) AS convertedDate FROM tableA; -- Replace column name and table name
OUTPUT of both queries:
|convertedDate|
|-------------|
|2014-01-02 |
In SQL SERVER, there are two types of built in conversion techniques.
Convert
Cast
Convert having its own defaults so it will be outdated in upgraded version of SQL SERVER
better make use of CAST Conversion technique
In your scenario.Already having the date with datatype of Varchar(8) trying to Convert into Date
Solve in systematic manner.
Adding the one new Column in the existing table.
Alter Table Table_name Add changedDataTypeDate Date
Update the values in varchar datatype to Date Datatype
UpDate Table_name Set ChangedDataTypeDate = CAST(OriginalDataTypeDate as Date)
Again change the new column name into old column name.
Sp_Rename 'Tablename.changedDataTypeDate','OriginalDataTypeDate','COLUMN'
Its done.
Based on u r requirement.
Alter Table customer Add Purchase_Changedtype Date
Update Customer set Purchase_changedtype = CAST(Purchase_date as Date)
(If u need Time also replace Datetime istead of Date)
Alter table Customer Drop column Purchase_date
Sp_Rename 'Customer.Purchase_ChangedType','Purchase_Date','Column'