Отмена автоматической замены чисел датами
Microsoft Excel предварительно программируется, чтобы упростить ввод дат. Например, 12/2 изменяется на 2-дек. Это очень неприятно, если вы вводите что-то, что не хотите менять на дату. К сожалению, отключить эту возможность не получится. Однако существует несколько способов обойти это.
Предформатация ячеек, в которые нужно ввести числа, в виде текста. В этом случае Excel не будет пытаться изменить то, что вы вводите в даты.
Если нужно ввести всего несколько чисел, можно сделать так, чтобы Excel не превнося их в даты, введите:
- Пробел перед вводом числа. После нажатия ввод пробел останется в ячейке. (См. заметки)
- Апостроф (‘) перед вводом числа, например ’11-53 или ‘1/47. Апостроф не отображается в ячейке после нажатия ввода.
- Нуль и пробел перед вводом дроби, например 1/2 или 3/4, чтобы они не менялись, например, на 2-янв или 4-мар. Введите 0 0 1/2 или 0 3/4. Ноль не остается в ячейке после нажатия ввод, и ячейка становится типом дробного числа.
- Выйдите из ячеек, в которые нужно ввести числа.
- Нажмите клавиши CTRL+1 (1 в строке чисел над клавишами QWERTY), чтобы открыть формат ячеек.
- Выберите тексти нажмите кнопку ОК.
- Выберите ячейки, в которые необходимо ввести числа.
- Щелкните Главная >Числовой формат >Текст.
- Рекомендуется использовать апостроф вместо пробела для ввода данных, если вы планируете использовать функции подменю для данных. Такие функции, как ПОИСКПОЗ и ВПР, не учитывают апострофы при вычислении результатов.
- Если число в ячейке выровнено по левому краю, обычно это означает, что оно не отформатировано как число.
- При введении в ячейку числа с буквой «е», например 1e9, оно автоматически преобразуется в научное число: 1,00E+09. Чтобы избежать этого, введите перед числом апостроф: ‘1e9
- В зависимости от введенного числа в левом верхнем углу ячейки может появиться маленький зеленый треугольник, указывающий на то, что число хранится как текст ,что для Excel является ошибкой. Не обращайте внимание на треугольник или щелкните его. Слева появится поле. Щелкните поле, а затем выберитеигнорировать ошибку , из-за чего треугольник будет отопуститься.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
Преобразование типов в 1С
Разберем основные вопросы преобразования типов в 1С 8.3: из строки в число, из числа в строку, из даты в число и прочие варианты. В этой статье мы рассмотрим функции преобразования значений, и я соберу в едино все варианты преобразования примитивных типов.
Строка в число в 1С
Узнаем, как в 1С 8.3 преобразовать строку в число.
Пусть, у нас есть числа в таком виде.
СтрокаЧ1 = "120"; СтрокаЧ2 = "12.24"; СтрокаЧ3 = "12,24"; СтрокаЧ4 = "0,24"; СтрокаЧ5 = "0000001";
Для того, чтобы выполнить преобразование этих строк в число, необходимо воспользоваться методом Число. Этот метод преобразует параметр в число.
Ч1 = Число(СтрокаЧ1); Ч2 = Число(СтрокаЧ2); Ч3 = Число(СтрокаЧ3); Ч4 = Число(СтрокаЧ4); Ч5 = Число(СтрокаЧ5);
Обратите внимание, что разделять дробную часть можно в строке как при помощи символа точка «.», так и при помощи символа запятая «,». Если перед каким-то числом в строке стоят нули, то они отсекаются. У нас будет следующий результат.

Число в строку в 1С
Рассмотрим обратную задачу, когда в 1С 8.3 нужно преобразовать число в строку. Самый простой вариант использовать метод Строка, который преобразует собственный параметр в строку.
Ч1 = 120; Ч2 = 12.24; Ч3 = 10000000000; СтрокаЧ1 = Строка(Ч1); СтрокаЧ2 = Строка(Ч2); СтрокаЧ3 = Строка(Ч3); Сообщить(СтрокаЧ1); Сообщить(СтрокаЧ2); Сообщить(СтрокаЧ3);
И какой результат возвращает этот код:

У этого способа имеется недостаток: он ставит пробелы между разрядами у длинных чисел. Для того, чтобы в 1С преобразовать число в строку без пробелов нужно воспользоваться функцией Формат. Данная функция имеет два параметра: преобразуемое значение и форматную строку. Если нам нужно указать, что число преобразуется в строку без пробелов в разряде, то необходимо указать в форматной строке, что порядок разделения группировки разрядов числа или равен 0, или пустой.
Ч1 = 10000000000; СтрокаЧ1 = Формат(Ч1,"ЧГ color: red;">); Сообщить(СтрокаЧ1);
Результат будет без разрядов:

Строка в дату 1С
Узнаем, как преобразовать в 1С 8.3 строку в дату. Для этого необходимо использовать метод Дата, который преобразует параметр (в том числе строку ) в дату . Причем, замечу, что строка должна быть задана в таком формате «ГГГГММДДЧЧММСС».
Подробнее о форматах дат читайте в этой статье: даты в 1С.
СтрокаД1 = "20120910"; СтрокаД2 = "20120910121559"; СтрокаД3 = "00010101121559"; Дата1 = Дата(СтрокаД1); Дата2 = Дата(СтрокаД2); Дата3 = Дата(СтрокаД3);

Если мы зададим дату в не верном формате, то преобразование не произойдет и возникнет ошибка «Преобразование значения к типу Дата не может быть выполнено».
Например, этот код:
СтрокаД1 = "121559"; Дата1 = Дата(СтрокаД1)
Приведет к ошибке:

Дата в строку в 1С
Преобразовать дату в строку можно несколькими способами. Первый способ: воспользоваться уже знакомым нам методом Строка.
Дата1 = Дата(2012,10,12); СтрокаД = Строка(Дата1); Сообщить(СтрокаД);
В этом случае у нас выйдет строка в обычном «полном» формате даты.

А чтобы получить дату в том формате, в каком нам нужно, необходимо воспользоваться методом Формат.
Форматов дат может быть великое множество ,все я разбирать в этой статье не буду, покажу только как можно быстро воспользоваться этой функцией.
Мы изменим предыдущий код, написав вместо метода Строка метод Формат, а в качестве второго параметра у метода Формат напишем просто две кавычки.
Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,""); Сообщить(СтрокаД);
После нужно между кавычками поставить курсор, вызвать контекстное меню, и применить в нем команду Конструктор форматной строки.

В этом конструкторе на закладке Дата вы можете выбрать удобный вам формат даты.

И после нажатия кнопки ОК этого конструктора, нужный формат появится в виде строки.
Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,"ДФ=dd/MM/yy"); Сообщить(СтрокаД);
В результате метода Формат, дата будет преобразована в строку в том виде, в каком нам необходимо.

Строка в булево в 1С
При помощи метода Булево мы можем некоторые строковые представления (Да, Нет, Истина, Ложь) преобразовывать в значения Истина или Ложь.
Например, следующие переменные:
стр_Да = Булево("Да"); стр_Нет = Булево("Нет"); стр_Истина = Булево("Истина"); стр_Ложь = Булево("Ложь");
Будут иметь такие значения:

Булево в строку в 1С
Разберем, как в 1С можно выразить тип булево строкой. Булево значение можно преобразовать в строку несколькими способами. Во-первых, можно просто воспользоваться методом Строка.
Например, как здесь:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Строка(б_Истина); СтрЛожь = Строка(б_Ложь); Сообщить(СтрИстина); Сообщить(СтрЛожь);
У нас будет выходить следующий результат:

В этом случае, булево в строку преобразовалось согласно региональным установкам информационной базы.
Если мы, как-то по-другому хотим преобразовать булево в строку, то можно воспользоваться уже знакомым нам методом Формат.
Переделаем, предыдущий код:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,""); СтрЛожь = Формат(б_Ложь,"");
Знакомым способом вызовем конструктор форматной строки, где на закладке Булево введем преставление значений Истина и Ложь.

После нажатия кнопки ОК конструктора, второй параметр метода Формат заполнится:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,"БЛ='Ни как нет'; БИ=Конечно"); СтрЛожь = Формат(б_Ложь,"БЛ='Ни как нет'; БИ=Конечно"); Сообщить(СтрИстина); Сообщить(СтрЛожь);
И будет следующий результат:

Число в булево в 1С
В 1С 8.3. мы можем преобразовать любое число в булево по следующему правилу: 0 будет преобразован в Ложь, все остальные значения в Истина.
б_Ложь = Булево(0); б_Истина = Булево(100000);
Будет следующий результат:

Булево в число в 1С
Можно сделать и обратное преобразование. Булево значение в число.
Для этого нужно воспользоваться методом Число, где в качестве параметра указать булево значение. Тогда Истина будет преобразована в 1С, а Ложь – в 0.
Например, как в этом коде:
б_Истина = Истина; б_Ложь = Ложь; ч_Истина = Число(б_Истина); ч_Ложь = Число(б_Ложь);
С таким результатом:

Статьи о примитивных типах в 1С:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Работа с датой в программировании
Форматы даты и времени – информация, с которой нередко работают программисты. Ее реализация несколько отличается в зависимости от выбранного языка программирования.
В данной статье будет рассказано о том, как грамотно работать с форматами даты и времени в JavaScript и HTML. Это популярные языки программирования, на которых можно написать приложения клиент-серверного типа. В них упомянутые компоненты играют огромную роль.
JavaScript
Перед тем, как изучать основы записи формата даты и времени, нужно запомнить – в JavaScript за работу с рассматриваемыми элементами отвечает специальный встроенный объект. Он называется Date. Включает в себя не только время и «числа-года», но и предоставляет методы, позволяющие оперировать предложенными компонентами.
Создание
Дата – элемент, который отражает промежуток: текущий, будущий или прошлый. Выражается через:
Data – объект, который позволяет хранить не только дату, но и время с высокой точностью – до миллисекунд.
Создать его можно в JavaScript несколькими подходами:
- С поддержкой текущих параметров. Формат включает в себя отображение информации, актуальной на момент работы/запуска программного обеспечения. Для его реализации потребуется создать экземпляр класса Date. Нужные параметры в строке характеристик не указываются:
- .
- Формат, включающий в себя указание миллисекунд. Отсчет производится с 1 января 1970 года: .
- Создание даты и времени путем передачи объекту Date строки. Программный язык постарается распознать информацию, после чего выведет ее на экран:.
- Путем записи параметров (дня недели, месяца, года, часов, минут, секунд, а также миллисекунд) через запятую. Здесь обязательно сделать акцент на годе и месяце. Остальные элементы не являются ключевыми: .
Перед тем, как создавать рассматриваемые элементы, нужно выбрать желаемый формат даты, а также времени. В противном случае реализация метода не увенчается успехом. Система попросту не поймет, как грамотно выводить информацию на экран.
Возможные формы записи
У даты форматы могут отличаться. Этот момент необходимо определить до непосредственного внедрения в программный код. То же самое касается времени. Его formats тоже бывают разными. Многое зависит от точности отображения информации, а также от личных пользовательских предпочтений.
Дни и годы
Работая с форматами даты, нужно запомнить – тут разрешено отображать:
- точные текущие сведения (без «часов» и с ними – на выбор);
- с указанием временной зоны;
- год-месяц-число;
- месяц-число;
- год-месяц;
- год-неделя;
- только код.
Формат дат, а также времени, задается в зависимости от личных предпочтений каждого конкретного разработчика. Обычно используется первый вариант. В отдельных случаях – совместно с «часами».
Стандартная форма представления рассматриваемого элемента имеет такую запись: YYYY-MM-DDThh:mm:ssTZD. Здесь:
- YYYY – год, 4 элемента;
- MM – месяц с указанием 2-х цифр;
- DD – конкретизация числа;
- T – разделитель форматов даты и времени (вместо него можно ставить пробел).
Далее – временные отрезки. О них предстоит поговорить чуть позже. Главное учесть, что TZD – это задействованная зона. Соответствующие сведения пригодятся для большинства веб-приложений.
Выше – наглядная интерпретация того, как выглядит формат даты в том или ином случае. А еще – образцы желаемой формы представления в JavaScript.
Работа с часами
Временные отрезки тоже могут пригодится. Отображение часов в той или иной форме – простая операция, но ее нужно грамотно реализовать. Особое внимание уделяется способу представления интересующих сведений.
На примере ранее указанной записи стоит учесть, что в ней:
- hh – часы (24-часовой формат);
- mm – минуты;
- ss – секунды.
TZD – временная зона, которая указывается в виде +hh:mm или –hh:mm. В JS нередко запись в предложенной ранее формуле встречается как Z.
Длительность
Рассматривая формат имеющейся даты, а также времени, нужно обратить внимание на такую особенность, как длительность. Она тоже отображает «часы». Отвечает за тот или иной период. Работает точно так же, как и в HTML.
Здесь используется time format в виде: PWDTHMS. Расчет ведется в секундах. Если указывается иная величина, происходит конвертация через умножение.
В предложенной интерпретации:
- P – префикс периода;
- W – суффикс недель (604 800 секунд);
- D – количество дней (86 400 сек.);
- T – префикс временного характера;
- H – часы (3 600);
- M – минуты;
- S — секунды.
А вот – пример записи формата не только даты, но и времени. Здесь x – это любое желаемое число.
Получение элементов и их установка
В JavaScript есть специальные методы, включенные в Date. Они помогают работать с рассматриваемыми сведениями. Для получения компонентов используется get. Тут рекомендуется учесть следующие методы:
- FullYear – год в виде 4-х чисел;
- Month – месяц (нумерация с 0);
- Date – число;
- Hours – часы (0-23);
- Minutes – минуты (от 0 до 59 включительно);
- Seconds – секунды;
- MilliSeconds – миллисекунды (от 0 до 999).
Возврат происходит с учетом часового пояса, установленного на устройстве конкретного клиента. В случае с установкой интересующих компонентов нужно использовать не get, а set.
Вот – пример того, как соответствующие варианты будут выглядеть в программном коде. Он поможет намного лучше и быстрее освоить соответствующий материал.
В HTML
HTML – распространенный язык для веб-программирования. В нем полно полезных функций и возможностей. Только работать с рассматриваемыми компонентами без дополнительных средств не получится. Придется предварительно воспользоваться JavaScript.
Для того, чтобы вывести текущие сведения на экран (год, месяц и так далее), а также часы вместе с «поясом», потребуется использовать следующий скрипт:
Такой вариант не всегда удобен. Из-за этого возникает необходимость в составлении нового скрипта. Такого, который поможет отображать сведения в «привычной» форме. Выглядит он так:
А вот и результат обработки кода. Но и это еще не все. При создании веб-приложений может потребоваться обновление сведений в реальном времени. В случае с HTML предстоит сформировать новый скрипт.
Выше – пример того, как он будет выглядеть. Для реализации использовались интервалы в JavaScript.
Какое число не преобразовывается в дату программист
Типы DATETIME , DATE и TIMESTAMP являются родственными типами данных. В данном разделе описаны их свойства, общие черты и различия.
Тип данных DATETIME используется для величин, содержащих информацию как о дате, так и о времени. MySQL извлекает и выводит величины DATETIME в формате ‘YYYY-MM-DD HH:MM:SS’ . Поддерживается диапазон величин от ‘1000-01-01 00:00:00’ до ‘9999-12-31 23:59:59’ . (»поддерживается» означает, что хотя величины с более ранними временными значениями, возможно, тоже будут работать, но нет гарантии того, что они будут правильно храниться и отображаться).
Тип DATE используется для величин с информацией только о дате, без части, содержащей время. MySQL извлекает и выводит величины DATE в формате ‘YYYY-MM-DD’ . Поддерживается диапазон величин от ‘1000-01-01’ до ‘9999-12-31’ .
Тип столбца TIMESTAMP обеспечивает тип представления данных, который можно использовать для автоматической записи текущих даты и времени при выполнении операций INSERT или UPDATE . При наличии нескольких столбцов типа TIMESTAMP только первый из них обновляется автоматически.
Автоматическое обновление первого столбца с типом TIMESTAMP происходит при выполнении любого из следующих условий:
- Столбец не указан явно в команде INSERT или LOAD DATA INFILE .
- Столбец не указан явно в команде UPDATE , и при этом изменяется величина в некотором другом столбце (следует отметить, что команда UPDATE , устанавливающая столбец в то же самое значение, которое было до выполнения команды, не вызовет обновления столбца TIMESTAMP , поскольку в целях повышения производительности MySQL игнорирует подобные обновления при установке столбца в его текущее значение).
- Величина в столбце TIMESTAMP явно установлена в NULL .
Для остальных (кроме первого) столбцов типа TIMESTAMP также можно задать установку в значение текущих даты и времени. Для этого необходимо просто установить столбец в NULL или в NOW() .
Любой столбец типа TIMESTAMP (даже первый столбец данного типа) можно установить в значение, отличное от текущих даты и времени. Это делается путем явной установки его в желаемое значение. Данное свойство можно использовать, например, если необходимо установить столбец TIMESTAMP в значение текущих даты и времени при создании строки, а при последующем обновлении этой строки значение столбца не должно изменяться:
- Пусть MySQL автоматически установит значение столбца с типом TIMESTAMP при создании данной строки. Столбец будет установлен в исходное состояние со значением текущих даты и времени.
- При выполнении последующих обновлений других столбцов в данной строке необходимо явно установить столбец TIMESTAMP в его текущее значение.
Однако, с другой стороны, для этих целей, возможно, будет проще использовать столбец DATETIME . При создании строки его следует инициализировать функцией NOW() и оставить в покое при последующих обновлениях.
Величины типа TIMESTAMP могут принимать значения от начала 1970 года до некоторого значения в 2037 году с разрешением в одну секунду. Эти величины выводятся в виде числовых значений.
Формат данных, в котором MySQL извлекает и показывает величины TIMESTAMP , зависит от количества показываемых символов. Это проиллюстрировано в приведенной ниже таблице. Полный формат TIMESTAMP составляет 14 десятичных разрядов, но можно создавать столбцы типа TIMESTAMP и с более короткой строкой вывода:
| Тип столбца | Формат вывода |
| TIMESTAMP(14) | YYYYMMDDHHMMSS |
| TIMESTAMP(12) | YYMMDDHHMMSS |
| TIMESTAMP(10) | YYMMDDHHMM |
| TIMESTAMP(8) | YYYYMMDD |
| TIMESTAMP(6) | YYMMDD |
| TIMESTAMP(4) | YYMM |
| TIMESTAMP(2) | YY |
Независимо от размера выводимого значения размер данных, хранящихся в столбцах типа TIMESTAMP , всегда один и тот же. Чаще всего используется формат вывода с 6, 8, 12 или 14 десятичными знаками. При создании таблицы можно указать произвольный размер выводимых значений, однако если этот размер задать равным 0 или превышающим 14, то будет использоваться значение 14. Нечетные значения размеров в интервале от 1 до 13 будут приведены к ближайшему большему четному числу.
Величины DATETIME , DATE и TIMESTAMP могут быть заданы любым стандартным набором форматов:
- Как строка в формате ‘YYYY-MM-DD HH:MM:SS’ или в формате ‘YY-MM-DD HH:MM:SS’ . Допускается «облегченный» синтаксис — можно использовать любой знак пунктуации в качестве разделительного между частями разделов даты или времени. Например, величины ’98-12-31 11:30:45′ , ‘98.12.31 11+30+45′ , ’98/12/31 11*30*45′ и ’98@12@31 11^30^45’ являются эквивалентными.
- Как строка в формате ‘YYYY-MM-DD’ или в формате ‘YY-MM-DD’ . Здесь также допустим «облегченный» синтаксис. Например, величины ’98-12-31′ , ‘98.12.31’ , ’98/12/31′ и ’98@12@31′ являются эквивалентными.
- Как строка без разделительных знаков в формате ‘YYYYMMDDHHMMSS’ или в формате ‘YYMMDDHHMMSS’ , при условии, что строка понимается как дата. Например, величины ‘19970523091528’ и ‘970523091528’ можно интерпретировать как ‘1997-05-23 09:15:28’ , но величина ‘971122129015’ является недопустимой (значение раздела минут является абсурдным) и преобразуется в ‘0000-00-00 00:00:00’ .
- Как строка без разделительных знаков в формате ‘YYYYMMDD’ или в формате ‘YYMMDD’ , при условии, что строка интерпретируется как дата. Например, величины ‘19970523’ и ‘970523’ можно интерпретировать как ‘1997-05-23’ , но величина ‘971332’ является недопустимой (значения разделов месяца и дня не имеют смысла) и преобразуется в ‘0000-00-00’ .
- Как число в формате YYYYMMDDHHMMSS или в формате YYMMDDHHMMSS , при условии, что число интерпретируется как дата. Например, величины 19830905132800 и 830905132800 интерпретируются как ‘1983-09-05 13:28:00’ .
- Как число в формате YYYYMMDD или в формате YYMMDD , при условии, что число интерпретируется как дата. Например, величины 19830905 и 830905 интерпретируются как ‘1983-09-05’ .
- Как результат выполнения функции, возвращающей величину, приемлемую в контекстах типов данных DATETIME , DATE или TIMESTAMP (например, функции NOW() или CURRENT_DATE ).
Недопустимые значения величин DATETIME , DATE или T IMESTAMP преобразуются в значение «ноль» соответствующего типа величин ( ‘0000-00-00 00:00:00’ , ‘0000-00-00’ , или 00000000000000 ).
Для величин, представленных как строки, содержащие разделительные знаки между частями даты, нет необходимости указывать два разряда для значений месяца или дня, меньших, чем 10 . Так, величина ‘1979-6-9’ эквивалентна величине ‘1979-06-09’ . Аналогично, для величин, представленных как строки, содержащие разделительные знаки внутри обозначения времени, нет необходимости указывать два разряда для значений часов, минут или секунд, меньших, чем 10 . Так,
Величины, определенные как числа, должны иметь 6 , 8 , 12 , или 14 десятичных разрядов. Предполагается, что число, имеющее 8 или 14 разрядов, представлено в форматах YYYYMMDD или YYYYMMDDHHMMSS соответственно, причем год указан в первых четырех разрядах. Если же длина числа 6 или 12 разрядов, то предполагаются соответственно форматы YYMMDD или YYMMDDHHMMSS , где год указан в первых двух разрядах. Числа, длина которых не соответствует ни одному из описанных вариантов, интерпретируются как дополненные спереди нулями до ближайшей вышеуказанной длины.
Величины, представленные строками без разделительных знаков, интерпретируются с учетом их длины согласно приведенным далее правилам. Если длина строки равна 8 или 14 символам, то предполагается, что год задан первыми четырьмя символами. В противном случае предполагается, что год задан двумя первыми символами. Строка интерпретируется слева направо, при этом определяются значения для года, месяца, дня, часов, минут и секунд для всех представленных в строке разделов. Это означает, что строка с длиной меньше, чем 6 символов, не может быть использована. Например, если задать строку вида ‘9903’ , полагая, что это будет означать март 1999 года, то MySQL внесет в таблицу «нулевую» дату. Год и месяц в данной записи равны 99 и 03 соответственно, но раздел, представляющий день, пропущен (значение равно нулю), поэтому в целом данная величина не является достоверным значением даты.
При хранении допустимых величин в столбцах типа TIMESTAMP используется полная точность, указанная при их задании, независимо от количества выводимых символов. Это свойство имеет несколько следствий:
- Необходимо всегда указывать год, месяц и день даже для типов TIMESTAMP(4) или TIMESTAMP(2) . В противном случае задаваемая величина не будет допустимым значением даты и будет храниться как 0 .
- При увеличении ширины узкого столбца TIMESTAMP путем использования команды ALTER TABLE будет выводиться ранее «скрытая» информация.
- И аналогично, при сужении столбца TIMESTAMP хранимая информация не будет потеряна, если не принимать во внимание, что при выводе информации будет выдаваться меньше.
- Хотя величины TIMESTAMP хранятся с полной точностью, непосредственно может работать с этим исходным хранимым значением величины только функция UNIX_TIMESTAMP() . Остальные функции оперируют форматированными значениями извлеченной величины. Это означает, что нельзя использовать такие функции, как HOUR() или SECOND() , пока соответствующая часть величины TIMESTAMP не будет включена в ее форматированное значение. Например, раздел HH столбца TIMESTAMP не будет выводиться, пока количество выводимых символов не станет по меньшей мере равным 10 , так что попытки использовать HOUR() для более коротких величин TIMESTAMP приведут к бессмысленным результатам.
Величины одного типа даты можно в ряде случаев присвоить объекту другого типа даты. Однако при этом возможны некоторое изменение величины или потеря информации:
- Если присвоить значение типа DATE объекту DATETIME или TIMESTAMP , то в результирующей величине «временная» часть будет установлена в ’00:00:00′ , так как величина DATE не содержит информации о времени.
- Если присвоить значение типа DATE , DATETIME или TIMESTAMP объекту DATE , то «временная» часть в результирующей величине будет удалена, так как тип DATE не включает информацию о времени.
- Несмотря на то что все величины DATETIME , DATE и TIMESTAMP могут быть указаны с использованием одного и того же набора форматов, следует помнить, что указанные типы имеют разные интервалы допустимых значений. Например, величины типа TIMESTAMP не могут иметь значения даты более ранние, чем относящиеся к 1970 году или более поздние, чем относящиеся к 2037 году. Это означает, что такая дата, как ‘1968-01-01’ , будучи разрешенной для величины типа DATETIME или DATE , недопустима для величины типа TIMESTAMP и будет преобразована в 0 при присвоении этому объекту.
Задавая величины даты, следует иметь в виду некоторые «подводные камни»:
- Упрощенный формат, который допускается для величин, заданных строками, может ввести в заблуждение. Например, такая величина, как ’10:11:12′ , благодаря разделителю `:’ могла бы оказаться величиной времени, но, используемая в контексте даты, она будет интерпретирована как год ‘2010-11-12′ . В то же время величина ’10:45:15’ будет преобразована в ‘0000-00-00′ , так как для месяца значение ’45’ недопустимо.
- Сервер MySQL выполняет только первичную проверку истинности даты: дни 00-31 , месяцы 00-12 , года 1000-9999 . Любая дата вне этого диапазона преобразуется в 0000-00-00 . Следует отметить, что, тем не менее, при этом не запрещается хранить неверные даты, такие как 2002-04-31 . Это позволяет веб-приложениям сохранять данные форм без дополнительной проверки. Чтобы убедиться в достоверности даты, выполняется проверка в самом приложении.
- Величины года, представленные двумя разрядами, допускают неоднозначное толкование, так как неизвестно столетие. MySQL интерпретирует двухразрядные величины года по следующим правилам:
- Величины года в интервале 00-69 преобразуются в 2000-2069 .
- Величины года в интервале 70-99 преобразуются в 1970-1999 .