2011-01-17 2 views
1

이 (솔루션에 대한 내 대답은 아래를 참조 - 피드백에 대한 감사)(MySQL의 기능)

그것은 아마 정말 분명 뭔가하지만 난 내 SQL 뭐가 잘못 볼 수 없습니다 :

mysql> CREATE FUNCTION start_of_minute(
->  curdate DATE) 
-> RETURNS DATE 
-> DETERMINISTIC 
-> SQL SECURITY INVOKER 
-> BEGIN 
->  DECLARE sofm DATE; 
->  SET sofm = SUBDATE (
->   curdate, 
->   INTERVAL SECOND(curdate) SECOND 
->  ); 
-> RETURN sofm; 
-> END // 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near '); 
RETURN sofm; 
END' at line 11 

더욱 좌절 다음 작품으로 :

mysql> CREATE FUNCTION start_of_week(
->  curdate DATE, 
-> first_day_of_week INTEGER) 
-> RETURNS DATE 
-> DETERMINISTIC 
-> SQL SECURITY INVOKER 
-> BEGIN 
->  DECLARE sow DATE; 
->  SET sow = SUBDATE(
->   curdate, 
->   INTERVAL (WEEKDAY(curdate)+(7-first_day_of_week)%7) DAY 
->  ); 
->  RETURN sow; 
-> END // 
Query OK, 0 rows affected (0.00 sec) 

(NB 다양한 수준에서 날짜를 잘라내는 다른 방법이있을 수있다 - 나는 확실히 그들에 대해 듣고 싶네, 필자는 구문의 문제점을 알고 싶습니다. 마침표 시작을 계산하는 다른 방법이 아닙니다.

예, second() is a valid functionSECOND is a valid interval입니다. 대신 어쩌면이

second(cast(curdate as time)) 

하지만

같은 date

time의 기능 second() 테이크 인해 하위 날짜에 의미가 있기 때문에

TIA

+0

이 DB2에 태그를 지정하셨습니까? – Leons

+0

예 - mysql은 DB2와 구문 호환이 가능해야합니다 (둘 다 특정 공통 기능이 없음에도 불구하고). 아직 절차 적 mysql을 사용하는 사람들은 많지 않다. – symcbean

답변

1

나는 이미 유형에 대해 화를 내고 있다고 생각했지만 - '날짜'유형을 'DATETIME'유형으로 바꾸면 문제가 해결되지 않음 - 문제는 'SUBDATE'와 '(' ! '- 나는 MySQL은 그런 것들에 대해 까다로운 알고 있었다 결코

는 (나는 asnwer으로이 플래그를 싶지만 SO 처음 며칠을 기다려야 나를 원)

0

문제는 a given date to seconds에 대해 날짜 형식 (여전히 날짜 임)

0

DATE 대신 DATETIME 데이터 형식을 사용해야합니까?

1

CURDATE가 예약 된 단어입니다

drop function if exists start_of_minute; 

delimiter # 

create function start_of_minute 
(
p_curdate datetime 
) 
returns datetime 
begin 
declare sofm datetime; 
    set sofm = subdate(p_curdate, interval second(p_curdate) second); 
    return sofm; 
end# 

delimiter; 
select now(), start_of_minute(now()); 

편집

mysql> select curdate(); 
+------------+ 
| curdate() | 
+------------+ 
| 2011-01-17 | 
+------------+ 
1 row in set (0.00 sec) 
+0

'CURRENT_DATE'는 예약 키워드가 아니고 curdate입니까? – ajreal

+0

는 설명을 위해 편집을 추가했습니다. –