尝试创建表格时遇到两个问题。
对于 ** sysdate *** ,它表示无效的列名 * TO_DATE('01 -JAN-2008','DD-MON-YYYY'))); * 说TO_DATE不是重新组合的内置函数名。
^两者都在表发票中。
这是使用SQL SERVER 2012
CREATE TABLE VENDOR(
V_CODE INTEGER NOT NULL UNIQUE,
V_NAME VARCHAR(35) NOT NULL,
V_CONTACT VARCHAR(15) NOT NULL,
V_AREACODE CHAR(3) NOT NULL,
V_PHONE CHAR(8) NOT NULL,
V_STATE CHAR(2) NOT NULL,
v_ORDER CHAR(1) NOT NULL,
PRIMARY KEY (V_CODE));
CREATE TABLE PRODUCT(
P_CODE VARCHAR(10) NOT NULL,
P_DESCRIPT VARCHAR(35) NOT NULL,
P_INDATE DATE NOT NULL,
P_QOH SMALLINT NOT NULL,
P_MIN SMALLINT NOT NULL,
P_PRICE DECIMAL(8,2) NOT NULL,
P_DISCOUNT DECIMAL(5,2) NOT NULL,
V_CODE INTEGER,
PRIMARY KEY (P_CODE),
FOREIGN KEY(V_CODE) REFERENCES VENDOR ON UPDATE CASCADE);
CREATE TABLE CUSTOMER(
CUS_CODE DECIMAL PRIMARY KEY,
CUS_LNAME VARCHAR(15) NOT NULL,
CUS_FNAME VARCHAR(15) NOT NULL,
CUS_INITIAL CHAR(1),
CUS_AREACODE CHAR(3) DEFAULT '615' NOT NULL,
CHECK(CUS_AREACODE IN ('615','713','931')),
CUS_PHONE CHAR(8) NOT NULL,
CUS_BALANCE DECIMAL(9,2) DEFAULT 0.00,
CONSTRAINT CUS_UI1 UNIQUE (CUS_LNAME, CUS_FNAME));
CREATE TABLE INVOICE (
INV_NUMBER DECIMAL PRIMARY KEY,
CUS_CODE DECIMAL NOT NULL REFERENCES CUSTOMER(CUS_CODE),
INV_DATE DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT INV_CK1 CHECK (INV_DATE > TO_DATE('01-JAN-2008','DD-MON-YYYY')));
答案 0 :(得分:1)
您有两个问题:
获取当前系统日期和时间的函数在T-SQL / SQL Server中调用SYSDATETIME()
(不是sysdate
)
在T-SQL / SQL Server中将字符串转换为date
或datetime
的方法是使用CAST
或CONVERT
(不是{{1 - 在T-SQL中没有这样的功能)
使用类似
的内容TO_DATE
或类似的东西(它高度依赖于SQL Server中的语言/日期格式设置,无论它是否有效)。如果您需要指定特定格式,可以使用SELECT CAST('01-JAN-2008' AS DATE)
,它允许您使用多种预定义格式之一(请参阅relevant details in the MSDN documentation)。
如果仍然不够 - SQL Server 2012 有一个名为CONVERT
的新函数,它允许您指定格式化字符串的任意日期格式。再次,请参阅{ {3}}
最好的办法是尽量避免在字符串之间来回转换日期,在你的情况下,这应该很容易实现!只需使用:
PARSE