Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
Есть задание: Создать таблицу в которо при вставке данных (даты в поле Дата) должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020 Никак не получается реализовать. Может кто поможет? CREATE TABLE table1( id INT(11) NOT NULL AUTO_INCREMENT, DateOf date NOT NULL, PRIMARY KEY (id)) ENGINE = MYISAM AUTO_INCREMENT=1 CHARACTER SET UTF8mb4 COLLATE utf8mb4_general_ci, Create function 'Date_FN'() Returns TEXT AS BEGIN Declare @DATE_t Data, if 'DateOf'>'2000/01/01' then @DATE_t='DateOf' else Return 'is invalid Data', if @DATE_t<'2020/12/30' then INSERT INTO table1 (DateOf) VALUES (@DATE_t) else Return 'is invalid Data', End, А как теперь сюда прикрутить тригер??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2018, 18:37 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
А нафига триггер? Функции, вроде, вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2018, 19:42 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
А check constraint не справится?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2018, 13:36 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА check constraint не справится?Reference ManualThe CHECK clause is parsed but ignored by all storage engines. Kra-MaXпри вставке данных (даты в поле Дата) должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020Ну что при прохождении проверки запись помещается в таблицу, мы типа догадались... А что делать, если проверка не прошла? поменять на некую дефолтную? на некую вычисляемую из введённого значения? сгенерировать ошибку? А что делать, если не является валидной датой? А если введённое значение вообще не может быть приведено к типу даты? А если Null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2018, 15:01 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
vkleА нафига триггер? Функции, вроде, вполне достаточно. Тригер отрабатывает по условию "До вставки данных" автоматически!!! А функция запускается руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 09:32 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
AkinaDimitry SibiryakovА check constraint не справится?Reference ManualThe CHECK clause is parsed but ignored by all storage engines. Kra-MaXпри вставке данных (даты в поле Дата) должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020Ну что при прохождении проверки запись помещается в таблицу, мы типа догадались... А что делать, если проверка не прошла? поменять на некую дефолтную? на некую вычисляемую из введённого значения? сгенерировать ошибку? А что делать, если не является валидной датой? А если введённое значение вообще не может быть приведено к типу даты? А если Null? Любые другие данные не валидные описаны в функции и возвращают 'is invalid Data'" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 09:33 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 11:42 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
Akina Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Спасибо огромное. Почти отлично (( При попытке создать тригер валится ошибка (( 10:44:54 CREATE TRIGGER tr_bi BEFORE INSERT ON test FOR EACH ROW BEGIN IF new.dt < '2001-01-01' OR new.dt >= '2020-01-01' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Wrong date entered.'; END IF; END; Error Code: 1054. Unknown column 'dt' in 'NEW' 0.000 sec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 10:46 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
А поменять имена полей на свои не пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 12:19 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
vkleА нафига триггер? Функции, вроде, вполне достаточно. Я полностью создаю таблицу по вашему примеру - добьюсь корректной работы и тогда буду адаптировать. Я новичек - сразу нужно понять принцип - потом ломать))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 14:39 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
AkinaА поменять имена полей на свои не пробовал? Я полностью создаю таблицу по вашему примеру - добьюсь корректной работы и тогда буду адаптировать. Я новичек - сразу нужно понять принцип - потом ломать))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 14:40 |
|
||
|
Ограничение даты в БД
|
|||
|---|---|---|---|
|
#18+
Kra-MaXЯ полностью создаю таблицу по вашему примеруТогда покажите полностью то, что у Вас получается, так же, как у меня, процитируйте с консоли от CREATE TABLE и до сообщения об ошибке включительно. В теге SRC, есссно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 15:49 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1829745]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 374ms |

| 0 / 0 |
