SQL Server 2012表问题,sysdate和to_date问题

时间:2013-06-16 07:50:11

标签: sql sql-server web-applications

尝试创建表格时遇到两个问题。

对于 ** 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')));

1 个答案:

答案 0 :(得分:1)

您有两个问题:

  • 获取当前系统日期和时间的函数在T-SQL / SQL Server中调用SYSDATETIME()(不是sysdate

  • 在T-SQL / SQL Server中将字符串转换为datedatetime的方法是使用CASTCONVERT(不是{{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