Расширение psd какая программа открывает. Чем открыть файл PSD. Дополнительная информация о формате PSD

Расширение psd какая программа открывает. Чем открыть файл PSD. Дополнительная информация о формате PSD

26.02.2019

Описание диапазона величин для каждого типа и возможные форматы представления даты и времени приведены в разделе section 6.2.2 Типы данных даты и времени .

Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной date_col в течение последних 30 дней:

Mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) DAYOFWEEK(date) Возвращает индекс дня недели для аргумента date (1 = воскресенье, 2 = понедельник, ... 7 = суббота). Эти индексные величины соответствуют стандарту ODBC: mysql> SELECT DAYOFWEEK("1998-02-03"); -> 3 WEEKDAY(date) Возвращает индекс дня недели для аргумента date (0 =понедельник, 1 = вторник, ... 6 = воскресенье): mysql> SELECT WEEKDAY("1997-10-04 22:23:00"); -> 5 mysql> SELECT WEEKDAY("1997-11-05"); -> 2 DAYOFMONTH(date) Возвращает порядковый номер дня месяца для аргумента date в диапазоне от 1 до 31: mysql> SELECT DAYOFMONTH("1998-02-03"); -> 3 DAYOFYEAR(date) Возвращает порядковый номер дня года для аргумента date в диапазоне от 1 до 366: mysql> SELECT DAYOFYEAR("1998-02-03"); -> 34 MONTH(date) Возвращает порядковый номер месяца в году для аргумента date в диапазоне от 1 до 12: mysql> SELECT MONTH("1998-02-03"); -> 2 DAYNAME(date) Возвращает название дня недели для аргумента date: mysql> SELECT DAYNAME("1998-02-05"); -> "Thursday" MONTHNAME(date) Возвращает название месяца для аргумента date: mysql> SELECT MONTHNAME("1998-02-05"); -> "February" QUARTER(date) Возвращает номер квартала года для аргумента date в диапазоне от 1 до 4: mysql> SELECT QUARTER("98-04-01"); -> 2 WEEK(date) WEEK(date,first) При наличии одного аргумента возвращает порядковый номер недели в году для date в диапазоне от 0 до 53 (да, возможно начало 53-й недели) для регионов, где воскресенье считается первым днем недели. Форма WEEK() с двумя аргументами позволяет уточнить, с какого дня начинается неделя - с воскресенья или с понедельника. Неделя начинается с воскресенья, если второй аргумент равен 0, и с понедельника - если 1: mysql> SELECT WEEK("1998-02-20"); -> 7 mysql> SELECT WEEK("1998-02-20",0); -> 7 mysql> SELECT WEEK("1998-02-20",1); -> 8 mysql> SELECT WEEK("1998-12-31",1); -> 53 Примечание: в версии 4.0 функция WEEK(#,0) была изменена с целью соответствия календарю США. YEAR(date) Возвращает год для аргумента date в диапазоне от 1000 до 9999: mysql> SELECT YEAR("98-02-03"); -> 1998 YEARWEEK(date) YEARWEEK(date,first) Возвращает год и неделю для аргумента date . Второй аргумент в данной функции работает подобно второму аргументу в функции WEEK() . Следует учитывать, что год может отличаться от указанного в аргументе date для первой и последней недель года: mysql> SELECT YEARWEEK("1987-01-01"); -> 198653 HOUR(time) Возвращает час для аргумента time в диапазоне от 0 до 23: mysql> SELECT HOUR("10:05:03"); -> 10 MINUTE(time) Возвращает количество минут для аргумента time в диапазоне от 0 до 59: mysql> SELECT MINUTE("98-02-03 10:05:03"); -> 5 SECOND(time) Возвращает количество секунд для аргумента time в диапазоне от 0 до 59: mysql> SELECT SECOND("10:05:03"); -> 3 PERIOD_ADD(P,N) Добавляет N месяцев к периоду P (в формате YYMM или YYYYMM). Возвращает величину в формате YYYYMM . Следует учитывать, что аргумент периода P не является значением даты: mysql> SELECT PERIOD_ADD(9801,2); -> 199803 PERIOD_DIFF(P1,P2) Возвращает количество месяцев между периодами P1 и P2 . P1 и P2 должны быть в формате YYMM или YYYYMM . Следует учитывать, что аргументы периода P1 и P2 не являются значениями даты: mysql> SELECT PERIOD_DIFF(9802,199703); -> 11 DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) Данные функции производят арифметические действия над датами. Обе являются нововведением версии MySQL 3.22. Функции ADDDATE() и SUBDATE() - синонимы для DATE_ADD() и DATE_SUB() . В версии MySQL 3.23 вместо функций DATE_ADD() и DATE_SUB() можно использовать операторы + и - , если выражение с правой стороны представляет собой столбец типа DATE или DATETIME (см. пример ниже). Аргумент date является величиной типа DATETIME или DATE , задающей начальную дату. Выражение expr задает величину интервала, который следует добавить к начальной дате или вычесть из начальной даты. Выражение expr представляет собой строку, которая может начинаться с - для отрицательных значений интервалов. Ключевое слово type показывает, каким образом необходимо интерпретировать данное выражение. Вспомогательная функция EXTRACT(type FROM date) возвращает интервал указанного типа (type) из значения даты. В следующей таблице показана взаимосвязь аргументов type и expr:

Значение Type Ожидаемый формат expr
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
MONTH MONTHS
YEAR YEARS
MINUTE_SECOND "MINUTES:SECONDS"
HOUR_MINUTE "HOURS:MINUTES"
DAY_HOUR "DAYS HOURS"
YEAR_MONTH "YEARS-MONTHS"
HOUR_SECOND "HOURS:MINUTES:SECONDS"
DAY_MINUTE "DAYS HOURS:MINUTES"
DAY_SECOND "DAYS HOURS:MINUTES:SECONDS"
В MySQL формат выражения expr допускает любые разделительные знаки. Разделители, представленные в данной таблице, приведены в качестве примеров. Если аргумент date является величиной типа DATE и предполагаемые вычисления включают в себя только части YEAR , MONTH , и DAY (т.е. не содержат временной части TIME), то результат представляется величиной типа DATE . В других случаях результат представляет собой величину DATETIME: mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; -> 1998-01-01 00:00:00 mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; -> 1998-01-01 mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; -> 1997-12-31 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY); -> 1998-01-01 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02 Если указанный интервал слишком короткий (т.е. не включает все части интервала, ожидаемые при заданном ключевом слове type), то MySQL предполагает, что опущены крайние слева части интервала. Например, если указан аргумент type в виде DAY_SECOND , то ожидаемое выражение expr должно иметь следующие части: дни, часы, минуты и секунды. Если в этом случае указать значение интервала в виде "1:10" , то MySQL предполагает, что опущены дни и часы, а данная величина включает только минуты и секунды. Другими словами, сочетание "1:10" DAY_SECOND интерпретируется как эквивалент "1:10" MINUTE_SECOND . Аналогичным образом в MySQL интерпретируются и значения TIME - скорее как представляющие прошедшее время, чем как время дня. Следует учитывать, что при операциях сложения или вычитания с участием величины DATE и выражения, содержащего временную часть, данная величина DATE будет автоматически конвертироваться в величину типа DATETIME: mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 DAY); -> 1999-01-02 mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 HOUR); -> 1999-01-01 01:00:00 При использовании некорректных значений дат результат будет равен NULL . Если при суммировании MONTH , YEAR_MONTH или YEAR номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца: mysql> SELECT DATE_ADD("1998-01-30", INTERVAL 1 MONTH); -> 1998-02-28 Из предыдущего примера видно, что слово INTERVAL и ключевое слово type не являются регистро-зависимыми. EXTRACT(type FROM date) Типы интервалов для функции EXTRACT() используются те же, что и для функций DATE_ADD() или DATE_SUB() , но EXTRACT() производит скорее извлечение части из значения даты, чем выполнение арифметических действий. mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); -> 20102 TO_DAYS(date) функция возвращает номер дня для даты, указанной в аргументе date , (количество дней, прошедших с года 0): mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS("1997-10-07"); -> 729669 Функция TO_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку не учитывает дни, утерянные при изменении календаря. FROM_DAYS(N) Возвращает величину DATE для заданного номера дня N: mysql> SELECT FROM_DAYS(729669); -> "1997-10-07" Функция FROM_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку она не учитывает дни, утерянные при изменении календаря. DATE_FORMAT(date,format) Форматирует величину date в соответствии со строкой format . В строке format могут использоваться следующие определители:
Определитель Описание
%M Название месяца (январь...декабрь)
%W Название дня недели (воскресенье...суббота)
%D День месяца с английским суффиксом (1st, 2nd, 3rd и т.д.)
%Y Год, число, 4 разряда
%y Год, число, 2 разряда
%X Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с "%V"
%x Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с "%v"
%a Сокращенное наименование дня недели (Вс...Сб)
%d День месяца, число (00..31)
%e День месяца, число (0..31)
%m Месяц, число (01..12)
%c Месяц, число (1..12)
%b Сокращенное наименование месяца (Янв...Дек)
%j День года (001..366)
%H Час (00..23)
%k Час (0..23)
%h Час (01..12)
%I Час (01..12)
%l Час (1..12)
%i Минуты, число (00..59)
%r Время, 12-часовой формат (hh:mm:ss M)
%T Время, 24-часовой формат (hh:mm:ss)
%S Секунды (00..59)
%s Секунды (00..59)
%p AM или PM
%w День недели (0=воскресенье..6=суббота)
%U Неделя (00..53), где воскресенье считается первым днем недели
%u Неделя (00..53), где понедельник считается первым днем недели
%V Неделя (01..53), где воскресенье считается первым днем недели. Используется с `%X"
%v Неделя (01..53), где понедельник считается первым днем недели. Используется с `%x"
%% Литерал `%" .
Все другие символы просто копируются в результирующее выражение без интерпретации: mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%W %M %Y"); -> "Saturday October 1997" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%H:%i:%s"); -> "22:23:00" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%D %y %a %d %m %b %j"); -> "4th 97 Sat 04 10 Oct 277" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%H %k %I %r %T %S %w"); -> "22 22 10 10:23:00 PM 22:23:00 00 6" mysql> SELECT DATE_FORMAT("1999-01-01", "%X %V"); -> "1998 52" В MySQL 3.23 символ `%" должен предшествовать символам определителя формата. В более ранних версиях MySQL символ `%" необязателен. TIME_FORMAT(time,format) Данная функция используется аналогично описанной выше функции DATE_FORMAT() , но строка format может содержать только те определители формата, которые относятся к часам, минутам и секундам. При указании других определителей будет выдана величина NULL или 0 . CURDATE() CURRENT_DATE Возвращает сегодняшнюю дату как величину в формате YYYY-MM-DD или YYYYMMDD , в зависимости от того, в каком контексте используется функция - в строковом или числовом: mysql> SELECT CURDATE(); -> "1997-12-15" mysql> SELECT CURDATE() + 0; -> 19971215 CURTIME() CURRENT_TIME Возвращает текущее время как величину в формате HH:MM:SS или HHMMS , в зависимости от того, в каком контексте используется функция - в строковом или числовом: mysql> SELECT CURTIME(); -> "23:50:26" mysql> SELECT CURTIME() + 0; -> 235026 NOW() SYSDATE() CURRENT_TIMESTAMP Возвращает текущую дату и время как величину в формате YYYY-MM-DD HH:MM:SS или YYYYMMDDHHMMSS , в зависимости от того, в каком контексте используется функция - в строковом или числовом: mysql> SELECT NOW(); -> "1997-12-15 23:50:26" mysql> SELECT NOW() + 0; -> 19971215235026 UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) При вызове данной функции без аргумента она возвращает временную метку UNIX_TIMESTAMP (секунды с 1970-01-01 00:00:00 GMT) как беззнаковое целое число. Если функция UNIX_TIMESTAMP() вызывается с аргументом date , она возвращает величину аргумента как количество секунд с 1970-01-01 00:00:00 GMT. Аргумент date может представлять собой строку типа DATE , строку DATETIME , величину типа TIMESTAMP или число в формате YYMMDD или YYYYMMDD местного времени: mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP("1997-10-04 22:23:00"); -> 875996580 При использовании функции UNIX_TIMESTAMP в столбце TIMESTAMP эта функция будет возвращать величину внутренней временной метки непосредственно, без подразумеваемого преобразования строки во временную метку (``string-to-unix-timestamp""). Если заданная дата выходит за пределы допустимого диапазона, то функция UNIX_TIMESTAMP() возвратит 0 , но следует учитывать, что выполняется только базовая проверка (год 1970-2037, месяц 01-12, день 01-31). Если необходимо выполнить вычитание столбцов UNIX_TIMESTAMP() , результат можно преобразовать к целым числам со знаком. See section 6.3.5 Функции приведения типов . FROM_UNIXTIME(unix_timestamp) Возвращает представление аргумента unix_timestamp как величину в формате YYYY-MM-DD HH:MM:SS или YYYYMMDDHHMMSS , в зависимости от того, в каком контексте используется функция - в строковом или числовом: mysql> SELECT FROM_UNIXTIME(875996580); -> "1997-10-04 22:23:00" mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300 FROM_UNIXTIME(unix_timestamp,format) Возвращает строковое представление аргумента unix_timestamp , отформатированное в соответствии со строкой format . Строка format может содержать те же определители, которые перечислены в описании для функции DATE_FORMAT() : mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), "%Y %D %M %h:%i:%s %x"); -> "1997 23rd December 03:43:30 1997" SEC_TO_TIME(seconds) Возвращает аргумент seconds, преобразованный в часы, минуты и секунды, как величину в формате HH:MM:SS или HHMMSS , в зависимости от того, в каком контексте используется функция - в строковом или числовом: mysql> SELECT SEC_TO_TIME(2378); -> "00:39:38" mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938 TIME_TO_SEC(time) Возвращает аргумент time , преобразованный в секунды: mysql> SELECT TIME_TO_SEC("22:23:00"); -> 80580 mysql> SELECT TIME_TO_SEC("00:39:38"); -> 2378

User Comments

Posted by on Thursday June 20 2002, @7:08am [Delete ] [Edit ]

When selecting a timestamp datatype from a table
and want adjust to a timezone (this example is
from pacific time to EST):
SELECT date_format(DATE_ADD(,
INTERVAL 3 HOUR), "%M %e, %Y at %H:%i EST") FROM
;

Posted by Dan Allen on Tuesday June 25 2002, @12:50am [Delete ] [Edit ]

Does anyone else notice that
the function
YEARMONTH() is blatantly missing!!! Say you have
two dates and you want to do a period_diff...you
can"t just concat() YEAR() and MONTH() because
month is not "0" padded...just seems with
YEARWEEK() it would make sense to also have
YEARMONTH()...thoughts? I know you can do it with
DATE_FORMAT, but then why all the other
functions?

Posted by on Wednesday December 18 2002, @5:28pm [Delete ] [Edit ]

I have to wonder why there is no function that
does basically what this does:

SELECT FLOOR((UNIX_TIMESTAMP(NOW()) -
UNIX_TIMESTAMP(date_of_birth))/60/60/24/364.25)
as age

It would make a lot of code look a lot
cleaner.

This is even of particular importance for use
on
storing o collecting data about people in the US,
as US law prohibits collecting personal
information about anyone under 13 years of age,
and this trick figures out their age in years.

It would be a lot nicer with an AGE(date
[,date2]
) function.

The closest thing in there is period_diff,
which
doesn"t accept a standard date string and returns
months, which are oh-so-
useful

Actually, this doesn"t work in the case of pre-
epoch birthdates, worse yet. unix_timestamp
returns 0 for all pre-epoch dates.

I contend that that is a bug and really needs
to
be fixed.

Have to use period_diff/12 I guess.

Posted by Matthew Mullenweg on Wednesday December 18 2002, @5:27pm [Delete ] [Edit ]

You bring up some important issues, but
dealing with ages really isn"t that
hard. For
example you could do something like this:

Mysql> SELECT DATE_FORMAT(
FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(dob)), "%Y")+0
AS age FROM people;

Where "dob" is obviously their date of birth.
It"ll also work with pre and post-epoch dates.
Please excuse the funky formatting as the
comment system seems to insist on inserting line
breaks into the code block. I
ran into this problem while working on some
genealogical things over at href="http://www.mullenweg.com" >Mullenweg.com
, a family site. I hope this helps!

Posted by Dan Allen on Wednesday December 18 2002, @5:31pm [Delete ] [Edit ]



Seems to be a real pain to get the days in the
month, but here is one way

select
DATE_FORMAT(CONCAT(YEAR("2002-05-05"), "-",
MONTH("2002-05-05" + INTERVAL 1 MONTH), "-01") -
INTERVAL 1 DAY, "%e") as numDays

I guess it would be nice if we could just have a
DATE_FORMAT entity for this

Posted by Isaac Shepard on Wednesday December 18 2002, @5:31pm [Delete ] [Edit ]

If you"re looking for generic SQL queries that will
allow you to get the days, months, and years
between any two given dates, you might consider
using these. You just need to substitute date1 and
date2 with your date fields and mytable with your
table name.






Number of days between date1 and date2:

SELECT TO_DAYS(date2) -
TO_DAYS(date1) FROM `mytable` WHERE
1






Number of months between date1 and date2:

SELECT PERIOD_DIFF
(DATE_FORMAT(date2,"%Y%m"),DATE_FORMAT
(date1,"%Y%m")) - (MID(date2, 6, 5) < MID(date1,
6, 5)) FROM `mytable` WHERE 1






Number of years between date1 and date2:

SELECT (YEAR(date2) - YEAR
(date1)) - (MID(date2, 6, 5) < MID(date1, 6, 5))
FROM `mytable` WHERE 1

Now for some comments about these.

1. These results return integer number of years,
months, and days. They are "floored." Thus, 1.4
days would display as 1 day, and 13.9 years would
display as 13 years.

2. Note that I use boolean expressions in some
cases. Because boolean expressions evaluate to 0
or 1, I can use them to subtract 1 from the total
based on a condition.

For example, to calculate the number of years
between to dates, first simply subtract the years.
The problem is that doing so isn"t always correct.
Consider the number of years between July 1, 1950
and May 1, 1952. Technically, there is only one full
year between them. On July 1, 1952 and later,
there will be two years. Therefore, you should
subtract one year in case the date hasn"t yet
reached a full year. This is done by checking the if
the second month-day is before the first month-
day. If so, this results in a value of 1, which is
subtracted from the total.

3. To get the month-day, I use MID. This is better
than using RIGHT, since it will work for both dates
and datetimes.

4. As mentioned in a previous post, PERIOD_DIFF
needs yearmonth format, but there is really no best
way to do this. To get this, I use DATE_FORMAT
(date1,"%Y%m").

5. Unlike many other solutions, these queries should
work with dates prior to 01/01/1970.

6. Feedback would be much appreciated. Since I"m
using this in my own applications, I would be happy if
you let me know if you discover an error in the logic.

Posted by Jason Rust on Wednesday December 18 2002, @5:31pm [Delete ] [Edit ]

A couple other time between functions. This is
another way to calculate the months between two
dates which may come in handy at times as it is
linear:


Months Between 2002-02-15 and
2002-01-15
(((YEAR("2002-02-15") - 1) * 12 +
MONTH("2002-02-15")) - ((YEAR("2002-01-15") - 1) *
12 + MONTH("2002-01-15"))) - (MID("2002-01-15", 9,
2) < MID("2002-02-15", 9, 2))

The following is a weeks between function:

Weeks Between 2002-08-28 and
2002-08-21
FLOOR((TO_DAYS("2002-08-28") -
TO_DAYS("2002-08-21")) / 7)

Posted by on Thursday September 12 2002, @6:22am [Delete ] [Edit ]

You can"t do DATE_ADD("15:30:00", INTERVAL 55
MINUTE), it will return NULL, the workaround I found
is:
DATE_FORMAT(DATE_ADD(CONCAT("2000-01-
01 ",`time_field`),INTERVAL "minutes" MINUTE), "%
H:%i:%s")

Posted by Marcelo Celleri on Tuesday September 17 2002, @2:58pm [Delete ] [Edit ]

I have two datetime fields, (date_out, date_in) ,
they"re records of loggin and logout times and I
need to find the way to get the difference between
the two of them, and I tried this one: f_out -
f_in but it gave me an integer result that is
worthless for me, I need the difference in
seconds Could you please help me , cause I don"t
have an idea how to convert this answer to seconds

Posted by Ricky Orea on Tuesday November 12 2002, @3:51pm [Delete ] [Edit ]

My user inputs a date in the format
of "MM/DD/YYYYY", how can I convert it to the
format "YYYY/MM/DD" before I save it on a mysql
table?

Posted by Ram Narayan on Monday November 18 2002, @8:46pm [Delete ] [Edit ]

Hi All,
Adding to my friend Ricky Orea"s query, If my user
enters the date in dd mmm yyyy format(26 nov
2002), how should i insert into the mysql db.

Posted by louis bennett on Thursday November 21 2002, @11:35am [Delete ] [Edit ]

%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)

Not to be pedantic, but there is never a day "0"
in a month...

Posted by Twidi on Wednesday December 18 2002, @5:27pm [Delete ] [Edit ]

How to obtain number of days in a month:

Just take the first day of the month, add one
month (to get the first day of the next month) and
substract one day (to get the last day of the
previous month, that is the number of days), as
follow:

Select
dayofmonth(date_sub(date_add(concat(date_format(MYDATE,
"%Y-%m"), "-01"), interval 1 month), interval 1
day)) as number_of_days from MYTABLE;

(just replace MYDATE and MYTABLE)

Perhaps there"s an other way...

Posted by on Sunday December 1 2002, @10:46am [ on Wednesday January 8 2003, @5:25am [Delete ] [Edit ]

I am trying to write a MySQL script that will populate a table with records for each value between 2 given parameters. Without the loop structue available in
Stored Procedures, this is proving problematic. Does anyone have a solution?

Rough Example:-
Table "test" has a date field "test_date".

Итак, все календарные типы данных подробно описаны в разделе «10.3. Date and Time Types » руководства по MySQL. А важная информация, касающаяся поддержки СУБД временных зон, расписана в разделе «9.7. MySQL Server Time Zone Support ». Все следующее далее базируется на изучении руководства. В то же время, в здесь указаны лишь нюансы выбора в пользу того или иного типа, поэтому этот материал никак не заменяет мануал, но дополняет его.

Вначале краткая характеристика каждого из типов:

  • TIMESTAMP - тип данных для хранения даты и времени. Данные хранятся в виде количества секунд, прошедших с начала «эпохи Юникса». Диапазон значений: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Занимает 4 байта.
  • YEAR - тип данных для хранения года. Диапазон значений: 1901 - 2155. Занимает 1 байт.
  • DATE - тип данных для хранения даты. Диапазон значений: 1000-01-01 - 9999-12-31. Занимает 3 байта.
  • TIME - тип данных для хранения времени. Диапазон значений: −828:59:59 - 828:59:59. Занимает 3 байта.
  • DATETIME - тип данных для хранения даты и времени. Диапазон значений: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Занимает 8 байт.
Хозяйке на заметку . Интересно то, что большинство программистов полагают, что понятие «timestamp» - это и есть Unix-время. На самом же деле, timestamp - это метка, которая представляет собой последовательность символов, обозначающих дату и / или время, когда определенное событие произошло. А «время Юникса » (Unix time) или POSIX time - это количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Понятие timestamp шире, чем Unix time.

Проанализировав описание типов, представленное выше, можно сделать практически все выводы о достоинствах и недостатках тех или иных типов. Все довольно просто и очевидно.

Но прежде, чем рассказать об использовании этих типов, хочу заметить, что на практике часто используется другой тип для хранения даты и времени: целочисленное значение (для хранения даты - INT (4 байта), даты и времени - BIGINT (8 байт)). Отличие использования целочисленных типов от DATE и DATETIME лишь в том, что при выводе данные не форматируются, а в вычислениях с датами и временем целые числа требуется преобразовывать в соответствующий календарный тип. Кроме того, не производится проверка на валидность представленного значения перед сохранением. Возможности сортировки сохраняются. Поэтому INT и BIGINT имеет смысл использовать в тех же случаях, как DATE и DATETIME, с целью максимизации переносимости и независимости от СУБД. Других преимуществ я не вижу, если они есть, предлагаю указать в комментах.

Использование календарных типов данный в MySQL

Начнем с самого простого - тип YEAR . Единственное его достоинство - малый размер - всего-то 1 байт. Но из-за этого действует строгое ограничение по диапазону допустимых значений (тип может хранить только 255 разных значений). Мне сложно представить практическую ситуацию, когда может потребоваться хранить года строго в диапазоне от 1901 до 2155. Кроме того, тип SMALLINT (2 байта) дает диапазон, достаточный в большинстве ситуаций для хранения года. А экономить 1 байт на строке в таблице БД в наше время смысла нет.

Типы DATE и DATETIME можно объединить в одну группу. Они хранят дату или дату и время с довольно широким диапазоном допустимых значений, независимую от установленной на сервере временной зоны. Их использование определенно имеет практический смысл. Но если требуется хранить даты исторических событий, уходящие в прошлое за Нашу эру, придется выбрать другие типы данных. Для хранения дат неких событий, потенциально выходящих за рамки диапазона типа TIMESTAMP (дни рождений, даты выпуска продуктов, избрания президентов, запуски космических ракет и т.д.), отлично подойдут эти типы. При использовании этих типов нужно учитывать один важный нюанс, но об этом ниже.

Тип TIME можно использовать для хранения промежутка времени, когда не нужна точность меньше 1 секунды, и промежутки времени меньше 829 часов. Добавить тут больше нечего.

Остался самый интересный тип - TIMESTAMP . Рассматривать его надо в сравнении с DATE и DATETIME: TIMESTAMP тоже предназначен для хранения даты и/или времени происхождения неких событий. Важное отличие между ними в диапазонах значений: очевидно, что TIMESTAMP не годится для хранения исторических событий (даже таких, как дни рождений), но отлично подходит для хранения текущих (логирование, даты размещения статей, добавления товаров, оформления заказов) и предстоящих в обозримом будущем событий (выходы новых версий, календари и планировщики и т.д).

Основное удобство использования типа TIMESTAMP состоит в том, что для столбцов этого типа в таблицах можно задавать значение по умолчанию в виде подстановки текущего времени, а так же установки текущего времени при обновлении записи. Если вам требуется эти возможности, то с вероятностью 99% TIMESTAMP - именно то, что вам нужно. (Как этоделать, смотрите в мануале.)

Не стоит бояться того, что с приближением к 2038 году ваш софт перестанет работать. Во-первых, до этого времени вашим софтом, скорее всего, просто перестанут пользоваться (особенно версиями, которые пишутся сейчас). Во-вторых, с приближением к этой дате разработчики MySQL обязательно что-нибудь придумают для сохранения работоспособности вашего софта. Все решится так же хорошо, как проблема Y2K.

Итак, тип TIMESTAMP используем для хранения дат и времени свершения событий нашего времени, а DATETIME и DATE - для хранения дат и времени свершения исторических событий, или событий глубокого будущего.

Диапазоны значений - это важное отличие между типами TIMESTAMP, DATETIME и DATE, но не главное. Главное то, что TIMESTAMP хранит значение в UTC . При сохранении значения оно переводится из текущего временной зоны в UTC, а при его чтении - во время текущей временной зоны из UTC. DATETIME и DATE хранят и выводят всегда одно и то же время, независимо от временных зон.

Временные зоны устанавливаются в СУБД MySQL глобально или для текущего подключения .Последнее можно использовать для обеспечения работы разных пользователей в разных временных зонах на уровне СУБД . Все значения времени физически будут храниться в UTC, а приниматься от клиента и отдаваться клинту - в значениях его временной зоны. Но только при использовании типа данных TIMESTAMP. DATE и DATETIME всегда принимают, хранят и отдают одно и то же значение.

Функция NOW() и ее синонимы возвращают значение времени в текущей временной зоне пользователя.

Учитывая все эти обстоятельства, необходимо быть крайне внимательными при изменении временной зоны в пределах подключения к серверу и использовании типов DATE и DATETIME. Если надо хранить дату (например, дату рождения), то никаких проблем не будет. Дата рождения в любой зоне одинаковая. Т.е. если вы родились 1 января в 0:00 UTC/GMT+0, то это не значит, что в Америке будут праздновать ваш день рождения 31 декабря. Но если вы решите хранить время события в столбце DATETIME, то тут уже построить работу с пользовательскими временными зонами на уровне СУБД просто не выйдет. Поясню на примере:

Пользователь X работает в зоне UTC/GMT+2, Y - в зоне UTC/GMT+3. Для соединений пользователей с MySQL установлена соответствующая (у каждого своя) временная зона. Пользователь размещает сообщение на форуме, нас интересует дата написания сообщения.

Вариант 1: DATETIME. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. Значение в поле «дата» сообщения подставляется как результат выполнения функции NOW() - 14:00. Пользователь Y считывает время написания сообщения и видит те же 14:00. Но у него в настройках стоитзона UTC/GMT+3, и он думает, что сообщение было написано не только что, а час назад.

Вариант 2: TIMESTAMP. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. В поле «дата» попадает результат выполнения функции NOW() - в данном случае - 12:00 UTC/GMT+0. ПользовательY считывает время написания сообщения и получает (UTC/GMT+3)(12:00 UTC/GMT+0) = 15:00 UTC/GMT+3. Все получается ровно так, как мы хотим. И главное - пользоваться этим крайне удобно: для поддержки пользовательских временных зон не нужно писать никакой код приведения времени.

Возможности подстановки текущего времени и работы с временными зонами в типе TIMESTAMP настолько весомы, что если вам в неком логе надо хранить дату без времени, все равно стоит использовать TIMESTAMP, вместо DATE, не экономя 1 байт разницы между ними. При этом на «00:00:00» просто не обращать внимания.

Если же вы не можете использовать TIMESTAMP из-за относительно малого диапазона его значений (а обычно это 1-2 случая против 10-15 в базе сайта), придется использовать DATETIME и аккуратно его корректировать значения в нужных местах (т.е. при записи в это поле переводить дату в UTC, а при чтении - во время в зоне считывающего пользователя). Если вы храните только дату, то скорее всего не важно, какая у вас временная зона: новый год все празднуют 1 января по локальному времени, ничего переводить тут не понадобится.

MySql – это не просто привлекательная система для организации хранения данных, но и ОТЛИЧНОЕ СРЕДСТВО обработки информации.

Сегодня мы разберем работу с функциями mysql: Date, DateTime. Так же я расскажу о методах mysql применяемых для конвертирования строки в дату. B общем, разные подходы к решению задач связных датами в СУБД mysql.

Задачка.

Представим, вы пишите систему отправки смс-уведомлений по базе ваших клиентов.
Таблица 1. tbl_clients* — таблица с данными клиентов (Ф.И.О. и дата рождения), данными о количестве, виде товара и статусе обработки заявки.

Таблица 2. tbl_sms – таблица статусов смс и связи id клиента с датой получения статуса.

Ближе к боевым действиям. Вооружаемся встроенными функциями.

В таблице tbl_sms на один Id_clients записано несколько записей, с разными статусами и временем получения. Например:

Предположим, что начальник требует список последних статусов по всем клиентам. Быстро решить задачу можно применяя встроенные функции. Запрос sql для такого случая выглядит следующим образом:

SELECT * FROM tbl_sms ts JOIN (SELECT Id_clients, max(Date_status) as max_dat FROM tbl_sms GROUP BY Id_clients) ts_max ON ts. id_clients = ts_max. id_clients and ts. Date_status= ts_max.max_dat ;

Результат запроса — выборка записей с максимальной датой для каждого Id_clients:

Запрос сложный, я сам не с первого раза понял, но попытаюсь объяснить. В запросе мы объединяем две таблицы. Первая tbl_sms — содержит все данные без учета условий, так сказать в «сыром виде». Вторая таблица — результат запроса

SELECT Id_clients, max(Date_status) as max_dat FROM tbl_sms GROUP BY Id_clients ;

к той же tbl_sms с использование функции MAX() и группировкой по полю Id_clients.

Во второй таблице мы группируем записи по id_clients с помощью конструкции «GROUP BY Id_clients». То есть теперь у нас одна запись (хотя в таблице для одного значение id_clients присутствует несколько записей) – это одно значение поля id_clients. В SELECT мы используем функцию MAX(), результатом которой является выборка максимального значения записанных в поле таблицы. Для справки есть, в СУБД mysql обратная функция MIN(). В результате в запросе с использованием функции MAX() мы получаем максимальное значение поля Date_status для каждого значения поля id_clients.
И наконец, выбирая записи соответствующие следующим условиям: “ON ts. id_clients = ts_max. id_clients and ts. Date_status= ts_max.max_dat”, мы получаем желаемый результат.

Начальник, доволен. Но вот, приходит бухгалтер и ставит новую задачу: «Необходимо выбрать все статусы, которые мы получили, только за 05.10.2014 г.».

Пишем следующий запрос:

SELECT * FROM tbl_sms WHERE Date_status>’2014-10-05 00:00:00’ And Date_status<’2014-10-05 23:59:59’ ;

Так как тип данных поля Date_status – DATETIME, поэтому мы ставим следующие условия: значение От 00:00 и до 23:59 05.10.2014 –этот промежуток как раз и входят сутки или 24 часа. Следует обратить внимание на форму записи даты. В типе данных Date в mysql представляем дату в следующем формате Год(4)-Месяц(2)-День(2). Если бы поле «статус» имело формат DATE, то запрос имел бы следующий вид:

SELECT * FROM tbl_sms WHERE Date_status="2014-10-05";

В задаче бухгалтера мы разобрались. Отчеты сданы. Теперь рассмотрим работу с датами в mysql под другим углом — если дата представлена в виде строки. Бывает и такое…

Дата в типе VARCHAR или CHAR… Что делать? Использования функции преобразования строки.

Я сам не раз сталкивался с подобной проблемой. Дело в том, что если у вас дата в виде строки, то все выше описанные запросы становятся бесполезны. Например, нужно выбрать всех клиентов у кого значения поля Date_Zap лежит в определенном периоде дат. Не перечислять же все даты… Конечно нет. Выход есть всегда, и нас снова выручат встроенные функции. В для такой задачи в mysql, есть функция STR_TO_DATE().
Как уже понятно из названия, функция конвертирует строку в дату. Аргументы функции STR_TO_DATE: дата в типе данных CHAR или VARCHAR, и формат даты КОТОРУЮ ВЫ ПЕРЕДАЕТЕ.

Например, вы сделаете запрос к таблице tbl_clients:

SELECT Date_Zap, STR_TO_DATE(Date_Zap,’%d.%m.%Y’) FROM tbl_clients WHERE id_clietns=’345’;

Результат применения функции STR_TO_DATE() :

Как видите из привычного формата даты мы получаем дату формата mysql. Несколько комментариев по поводу запроса:

  • Если вы до конца не уверены в результате работы функции всегда делайте как тут, чтобы видеть значения поля до преобразования и после. Вам это сэкономит нервы.
  • Если вы собираетесь использовать результат, например, в программе и обращаться именно по имени поля, то советую заменить длинное название “STR_TO_DATE(Date_Zap,’%d.%m.%Y’)”, например, на название Data_Mysql для этого модифицируем запрос
SELECT Date_Zap, STR_TO_DATE(Date_Zap,’%d.%m.%Y’) as Data_Mysql FROM tbl_clients WHERE id_clietns=’345’;

Результат использования функции конвертирование строки в формат даты mysql (STR_TO_DATE()):

Отображение даты прописью.

Часто возникает такая необходимость, чтобы при создании отчетности из базы данных (mysql) на документах дата стояла в формате «День Месяц прописью Год». Например: есть “21.10.2014”, а надо “21 октября 2014”. Когда я столкнулся с такой проблемой, я писал целую обработку на Delphi, чтоб генерировать дату. Оказалось, что в СУБД mysql уже есть встроенная функция конвертирования даты из числового представления в дату прописью. И, как я говорил в начале, mysql — не только средство управления хранения данных, но и средство обработки информации.
Итак, получить дату в выше описанном формате легко в простом запросе:

SELECT DATE_FORMAT(‘2014-10-21’,’%d %M %Y’) as Data_Mysql; //Обратите внимание на написание %M

Все бы хорошо дата отображается прописью, но название месяца на английском. Такое может возникнуть, если на сервере глобальная переменная lc_time_names=en_EN. Значение для русской даты будет равно: lc_time_names=ru_RU.
Есть несколько вариантов решения данной задачи.
Первый вариант, можно прописать значение переменой по умолчанию в конфигурации сервера mysql. Для этого откройте my.ini в каталоге куда установлен сервер mysql, и в раздел «» вставите строку «lc_time_names = ‘ru_RU"».
Второй вариант, подойдет вам, если нет прямого доступа к конфигурации mysql. Значение переменой можно сменить при выполнении запроса sql. Просто перед запросом выполнить следующее: «SET lc_time_names = ‘ru_RU’;». Данной командой вы устанавливаете значение переменой lc_time_names в данной сессии с сервером mysql. То есть если вы потеряете связь с сервером mysql, при переподключении, она выставится по умолчанию на значение «en_EN».
Поэтому советую применять команду непосредственно перед выполнение запроса sql. В таком случае итоговый запрос примет вид:

SET lc_time_names = "ru_RU"; SELECT DATE_FORMAT(‘2014-10-21’,’%d %M %Y’) as ‘Data_Mysql’;

Результат работы запрос sql c использование функции DATE_FORMAT():

Как видите все стало корректно, название месяца стало русскоязычным.
Таким образом с помощью функций mysql легко и быстро обрабатывать информацию. Я вам советую не выполнять работу, которую вы можете перекинуть на средства mysql. Так вам меньше кода писать, и 90% случаев подобная система будет более стабильно работать. Проверено на собственном опыте. Надеюсь, данная статья будет вам полезна, Дорогие Читатели! С уважением, ваш Shinobi.

Объявление

Формат файлов PSD Raster image

Файлы PSD позволяют графическим дизайнерам, а также другим пользователям редактировать изображения с помощью слоев. Слои позволяют легко добавлять и удалять элементы, а также добавлять и удалять различные фильтры, эффекты, диапозитивы и в принципе менять изображение. Файлы PSD можно открыть различными версиями программы Photoshop. Более того, такие файлы можно сохранять в других форматах (PNG, JPEG, GIF и т.п.) для дальнейшей загрузки, отправки или сохранения. После конвертирования файла PSD в другой формат все слои становятся одним слоем. В случае же сохранения файла с расширением PSD слои сохранятся. Их можно просматривать и редактировать. Такие файлы очень часто используются в случае с черновиками документом, а не с готовыми публикациями или изображениями.

Технические сведения о файлах PSD

Файлы программы Photoshop с расширением PSD сохраняют изображение и одновременно позволяют воспользоваться набором инструментов редактирования в программе Adobe Photoshop. Некоторые из таких инструментов включают следующие: маски, диапозитивы, сочетание двух полутонов, градиенты, балансировку цветов, смешение, траектории обрезки и др. Файлы PSВ похожи на файлы PSD, не могут содержать изображения, чьи высота и ширина превышают 300 000 пикселей, а длина составляет более 4 эксабайт. При этом в таких файлах сохраняются отдельные слои, а не целое изображение. Такие запатентованные типы файлов имеют больший размер и служат в качестве рабочих документов для проектов графического дизайна. Конвертирование из формата PSD в другие форматы изображений позволяет получить окончательно сжатое изображение.

Дополнительная информация о формате PSD

Конечно, не обязательно знать, как сверстать шаблон из psd . Но эти знания могут пригодиться любому владельцу сайта. Всякое бывает в жизни!

Что такое psd шаблоны

Эти шаблоны являются исходным материалом для верстки сайта. Заготовка полностью отражает не только дизайн будущего ресурса, но и его размеры, схему расположения всех элементов. Создание psd шаблона для сайта является вторым этапом в цикле разработки веб-дизайна.

Перед этим с заказчиком обговариваются возможные варианты дизайна ресурса. На основании этих сведений и пожеланий клиента составляется техническое задание для художников и дизайнеров. По нему художники рисуют эскиз внешнего вида будущего ресурса, а дизайнеры создают в графических редакторах цифровое изображение художественного образца.

Разработка шаблона psd для сайта должна происходить с учетом возможностей воссоздания его дизайна с помощью языка html и css . Вот некоторые характеристики, которыми должен обладать качественный шаблон:

  • Каждый элемент дизайна должен быть выполнен на отдельном слое – структура шаблона становится видна при его раскрытии в Фотошопе. С помощью слоев все части дизайна можно редактировать независимо друг от друга.

Благодаря многослойности изменение одной части шаблона никак не отразится на всех остальных его элементах.

  • Рисунок шаблона сохраняется в формате psd (реже tiff ) – только эти графические форматы поддерживают многослойную структуру изображений. Остальные являются лишь алгоритмами сжатия графических объектов;
  • Вложенность – все слои должны быть сгруппированы по принадлежности к определенному структурному элементу дизайна (подвал, шапка, меню );
  • Приоритет однородных тонов – для фона в шаблоне лучше использовать однородные повторяющиеся тона, которые можно легко отобразить с помощью html и css ;
  • Как можно меньше фоновых изображений – использование в качестве фона полновесных рисунков сильно увеличивает объем всей страницы. А, следовательно, и время загрузки сайта. Особенно критично это требование для шаблона мобильного ресурса;
  • Использование направляющих – использование направляющих при выравнивании элементов psd шаблонов для сайтов является обязательным. Это во многом облегчает процесс верстки, когда некоторые части дизайна вырезаются и используются как изображения для фона:



  • Приоритет стандартным шрифтам – надписи лучше наносить стандартным набором шрифтов. При использовании редкого шрифта его файл должен прилагаться к шаблону;
  • Меньше нестандартного форматирования – изменять можно лишь стандартные параметры текста (размер, семейство, интервал ). Искажение текста с помощью инструментов графического редактора (выгибание и другие эффекты ) приведут к тому, что надпись будет использована как фоновый рисунок. А это ведет к увеличению веса всего шаблона:


  • Оптимальные размеры – по ширине psd шаблон для сайта должен быть не менее 1000 пикселей. При этом ширина фонового рисунка не может превышать указанную величину. Иначе это может привести к искажению отображения шаблона в браузере.

Шаблоны для баннеров

Создаются заготовки не только для сайтов, но и для отдельных элементов его дизайна. Качественный шаблон баннера должен обладать большинством из выше перечисленных характеристик. При этом выбор его размеров зависит от места расположения баннера на сайте.

Структура psd шаблонов баннеров также состоит из слоев, сгруппированных по соответствующим папкам. То есть такой шаблон представляет собой не простой рисунок, а составное изображение.

Благодаря послойной структуре шаблон баннера легко редактируется. Без нарушения общей структуры можно сменить все надписи и рисунки.


Но создать шаблон баннера под силу не только профессионалу, но и обычному пользователю. Для этого можно использовать ряд специальных онлайн-сервисов. Одним из них является сайт bannerfans.com :


Основы верстки

Рассмотрим на упрощенном примере, как происходит верстка. Для этого возьмем простой двухколоночный шаблон. В его шапке размещен логотип сайта, который мы вырежем, и будем использовать как фоновое изображение. Остальные части шаблона будем верстать с помощью html , а стили и размеры установим классами css :


Вот структура сайта, которую можно сверстать с помощью тегов

. Каждая из частей шаблона помещена в отдельный слой. Боковая панель и контент расположены внутри слоя-контейнера:

Контент

Теперь рассмотрим стилевые настройки, заданные с помощью классов css :

Header { margin-left:auto; margin-right:auto; margin-bottom:10px; width:1000px; height:100px; border:1px solid #000000; background: #009966; background-image: url(img/1.gif); } .pages { margin-left:auto; margin-right:auto; width:1000px; } .content { margin-right:10px; width:806px; height:450px; border:1px solid #000000; background: #999999; float:left; } .sidebar { width:180px; height:450px; border:1px solid #000000; background: #FF9900; float:left; } .foot { clear:both; } .footer { margin-top:10px; margin-left:auto; margin-right:auto; width:1000px; height:50px; border:1px solid #000000; background: #333399; }

Для каждого слоя в описании классов с помощью свойств width и height устанавливаются размеры. Цвет фона задается параметром background .

Позиционирование элементов осуществляется значениями нескольких полей:

  • margin-top – отступ от верхнего края окна браузера.
  • margin-left – от левого края.
  • margin-right – правого края.

Для шапки сразу устанавливается цвет и фоновое изображение. Рисунок вырезается из шаблона psd для сайта и помещается в отдельную папку. Путь к файлу указывается в поле background-image через url .



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows

Расширение файла .psd