programing

필드가 과거일 때 SQL 업데이트 레코드

jooyons 2023. 8. 8. 21:31
반응형

필드가 과거일 때 SQL 업데이트 레코드

필드 F12의 날짜가 오늘보다 오래된 "field"=0의 모든 레코드를 설정하려면 어떻게 해야 합니까?

유감스럽게도 필드 F12는 DateTime 필드가 아니라 문자열입니다.안타깝게도, 저는 그것을 바꿀 수 없습니다.나는 먼저 문자열을 날짜로 변환해야 합니다.

유감스럽게도 이 코드는 작동하지 않습니다.

UPDATE 'mytable' 
SET 'published' = '0' 
WHERE STR_TO_DATE('F12', '%d.%m.%Y') DATEDIFF(day, 'F12', NOW()) >= 1

phpMyAdmin의 스크린샷은 다음과 같습니다.

enter image description here

당신의 지원과 최고의 안부에 매우 감사드립니다.

나는 다음과 같은 논리를 기대합니다.

update mytable
    set published = 0
    where STR_TO_DATE(F12, '%d.%m.%Y') < curdate();

단일 따옴표는 문자열 상수에만 사용됩니다.그것이 당신의 질문에 대한 문제일 수 있습니다.아니면 당신이 사용하고 있는 것일 수도 있습니다.now()시간 구성 요소가 있으므로 오늘 날짜의 값도 업데이트합니다.

이것은 정답이 아닙니다.가상 필드에 대한 샘플일 뿐입니다.

샘플 테이블 생성

CREATE TABLE `table1` (
  `a` int(11) NOT NULL,
  `F12` varchar(32) DEFAULT NULL,
  `F12new` date AS (STR_TO_DATE(`F12`, '%d.%m.%Y')) PERSISTENT,
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;

견본의

MariaDB [bernd]> CREATE TABLE `table1` (   `a` int(11) NOT NULL,   `F12` varchar(32) DEFAULT NULL,   `F12new` date AS (STR_TO_DATE(`F12`, '%d.%m.%Y')) PERSISTENT ) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.19 sec)

MariaDB [bernd]> insert into table1 (a,F12) VALUES (1,'1.2.2018');
Query OK, 1 row affected (0.02 sec)

MariaDB [bernd]> select * from table1;
+---+----------+------------+
| a | F12      | F12new     |
+---+----------+------------+
| 1 | 1.2.2018 | 2018-02-01 |
+---+----------+------------+
1 row in set (0.01 sec)

MariaDB [bernd]> insert into table1 (a,F12) VALUES (1,'17.05.2029');
Query OK, 1 row affected (0.01 sec)

MariaDB [bernd]> select * from table1;
+---+------------+------------+
| a | F12        | F12new     |
+---+------------+------------+
| 1 | 1.2.2018   | 2018-02-01 |
| 1 | 17.05.2029 | 2029-05-17 |
+---+------------+------------+
2 rows in set (0.00 sec)

MariaDB [bernd]>

이제 F12new에 인덱스만 설정합니다.

언급URL : https://stackoverflow.com/questions/66660973/sql-update-record-when-field-is-in-the-past

반응형