Need to add constraint: date plus 10 days - sql

I'm trying to add a constraint to a table so that it displays one of the columns as the current date plus 10 days. Here's what I've tried so far (I'm very new to SQL):
ALTER TABLE orders
ADD CONSTRAINT default_date
DEFAULT DATEADD (DAY,10,required_date) FOR required_date
Halp!
Edit: I've also tried this now:
ALTER TABLE orders
ALTER COLUMN required_date
ADD CONSTRAINT required_date_plus_ten
DEFAULT DATEADD (DAY,10,required_date)
Edit: Thanks to ypercube & my classmate. The final code is:
ALTER TABLE orders
ADD CONSTRAINT default_date
DEFAULT (DATEADD (DAY,10,'required_date')) FOR required_date;

The syntax in SQL-Server, for adding a DEFAULT value to an existing column is:
ALTER TABLE orders
ADD CONSTRAINT required_date_plus_ten
DEFAULT DATEADD(day, 10, GETDATE())
FOR required_date ;
Tested in SQL-Fiddle

Related

Adding a computed column in Postgres SQL based on a date

Here my table.
CREATE TABLE annual_goals (
id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
content TEXT NOT NULL,
complete BOOLEAN DEFAULT false,
date_created TIMESTAMP DEFAULT now() NOT null,
date_modified TIMESTAMP DEFAULT now() NOT null
);
I want to alter it such that I can add a new column called month_num that returns the number of the month given date_created (i.e. if the date_created of an entry is 5/31/2019, I want the month_num to automatically populate 5).
I tried the following but I'm getting an error that states "ERROR: syntax error at or near "A
S"
ALTER TABLE annual_goals
ADD year_num
AS year(date_created);
Any help is greatly appreciated. Thanks
You have two errors in the code. One is that MySQL requires the type. The second is that the expression needs to be surrounded by parentheses:
ALTER TABLE annual_goals ADD year_num int AS ( year(date_created) );
EDIT:
In Postgres, you can use the syntax:
alter table annual_goals
add year_num int generated always as (extract(year from date_created)) stored;
Here is a db<>fiddle.
You could try this:
ALTER TABLE annual_goals
ADD year_num int;
UPDATE annual_goals
SET year_num=year(date_created);

Constrains using DATE

I'm trying to create a constrain to check the record is no greater than 2016.
Here is the record in my database
Here is my query:
ALTER TABLE SIGHTINGS
ADD CONSTRAINT CK_SIGHTING_DATE
CHECK (SIGHTING_DATE <=TO_DATE('01-JAN-16'));
But I got an error says: ERROR at line 1:
ORA-02436: date or system variable wrongly specified in CHECK
constraint.
I've checked some similar questions on this website but there solutions doesn't solve my problem.
One option is to use the extract() function as you just want to check for the year:
ALTER TABLE SIGHTINGS
ADD CONSTRAINT CK_SIGHTING_DATE
CHECK (extract(year from SIGHTING_DATE) < 2016);
or use an ANSI date literal:
ALTER TABLE SIGHTINGS
ADD CONSTRAINT CK_SIGHTING_DATE
CHECK (SIGHTING_DATE < date '2016-01-01');
you have make in date specifcation
ALTER TABLE SIGHTINGS
ADD CONSTRAINT CK_SIGHTING_DATE
CHECK (SIGHTING_DATE <=
/*TO_DATE('01-JAN-16','DD-MON-YY') as I was pointed your should specify 4 digits for year*/
TO_DATE('01-JAN-2016','DD-MON-YYYY'));
or
ALTER TABLE SIGHTINGS
ADD CONSTRAINT CK_SIGHTING_DATE
CHECK (SIGHTING_DATE <=DATE'2016-01-01');
another one things its what do you mean when you say "no greater than 2016"
Your check alow dates in 01-jan-2016 but not allow 02-jan-2016.
If you would like to include whole 2016 year write
SIGHTING_DATE < DATE'2017-01-01'
or
trunc(SIGHTING_DATE,'yy') <=DATE'2016-01-01'

Garbage value appear in a column instead of default value

I have a columns called From_date and to_date. The columns have default constraint as getdate() and 9999-12-31 respectively.
But I got something strange after loading data to table.
Instead of default value I am getting value in both the column as 1753-01-01 00:00:00.0000000
Has anyone came across this situation? How to solve this issue?
Here is some of the table DDL
ALTER TABLE [dbo].[mytable]
ADD CONSTRAINT [df_FMDT_IX]
DEFAULT (getdate()) FOR [from_date]
GO
ALTER TABLE [dbo].[mytable]
ADD CONSTRAINT [df_TODT_IX]
DEFAULT ('9999-12-31') FOR [to_date]
GO
DATATYPE FOR THE COLUMN IS DATETIME2
That date you're seeing is the minimum date value in SQL.
What is the significance of 1/1/1753 in SQL Server?
I'm assuming someone's entered a zero in that column which will display as the min possible value.

Alter column with default constraint in Oracle

This works fine in SQL Server.
ALTER TABLE HS_HR_PEA_EMPLOYEE
ADD CONSTRAINT SET_ADDED_TIME_AUTOMATICALLY DEFAULT GETDATE() FOR JS_PICKED_TIME
What is the Oracle equivalent query for this?
Just add DEFAULT current date for your column
ALTER TABLE HS_HR_PEA_EMPLOYEE MODIFY JS_PICKED_TIME DATE DEFAULT SYSDATE

SQL Date option

I have a little doubt, I want to create a table that had a date that can't be bigger the 2012/12/31, i searched on google but only had exemples on SELECT. I'm gonna put an example:
CREATE TABLE example(
IDExample number (8) primary key,
DateExample date // Here i want to put that condition, is it possible?
);
If you're using SQL Server you can add check contraint on the column in the following way.
ALTER TABLE dbo.example ADD CONSTRAINT CK_DateExample
CHECK (DateExample < '20130101')
If you're using Oracle, the syntax is very similar:
ALTER TABLE dbo.example ADD CONSTRAINT CK_DateExample
CHECK (DateExample < DATE '2013-01-01')