Попробуйте getTimezone и setTimezone , см. пример
(Но это использует класс)
UPDATE:
Без каких-либо классов вы можете попробовать что-то вроде этого:
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "
");
echo(date("Y-d-mTG:i:sz",$the_date) . "
");
echo(date_default_timezone_set("UTC") . "
");
echo(date("Y-d-mTG:i:sz", $the_date) . "
");
ПРИМЕЧАНИЕ. Возможно, вам потребуется также установить часовой пояс на оригинал
Если Вы находитесь на SQL Server 2017 или Azure, см. ответ Mathieu Renda .
у меня была подобная проблема, когда я пытался присоединиться к двум таблицам со связями "один ко многим". В SQL 2005 я нашел, что XML PATH
метод может обработать конкатенацию строк очень легко.
, Если существует таблица, названная STUDENTS
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
Результат, я ожидал, был:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
я использовал следующий T-SQL
:
SELECT Main.SubjectID,
LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
(
SELECT DISTINCT ST2.SubjectID,
(
SELECT ST1.StudentName + ',' AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
) [Students]
FROM dbo.Students ST2
) [Main]
можно сделать то же самое более компактным способом, если Вы можете concat запятые вначале и использование substring
для пропуска первого, таким образом, Вы не должны делать подзапроса:
SELECT DISTINCT ST2.SubjectID,
SUBSTRING(
(
SELECT ','+ST1.StudentName AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
), 2, 1000) [Students]
FROM dbo.Students ST2
Одним путем Вы могли сделать это в SQL Сервер должен был бы возвратить содержание таблицы как XML (для сырых данных XML), преобразовать результат в строку и затем заменить теги", ".
Зависит от Вашего поставщика базы данных. MySQL имеет concat_ws. SQL Server MS ожидает, что Вы сделаете это в своем клиентском приложении.
Обновление: Вы могли также сделать это во внешней процедуре или UDF, возможно, при помощи курсора или обращающегося кода CLR.
В MySQL существует функция, GROUP_CONCAT () , который позволяет Вам связывать значения от нескольких строк. Пример:
SELECT 1 AS a, GROUP_CONCAT(name ORDER BY name ASC SEPARATOR ', ') AS people
FROM users
WHERE id IN (1,2,3)
GROUP BY a
Этот ответ может возвратиться неожиданные результаты Для последовательных результатов, использовать один из ДЛЯ методов ПУТИ XML, подробно изложенных в других ответах.
Использование COALESCE
:
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
Просто некоторое объяснение (так как этот ответ, кажется, получает относительно регулярные представления):
1) Никакая потребность инициализировать @Names
со значением пустой строки.
2) Никакая потребность снять изоляцию с дополнительного разделителя в конце.
@Names
ПУСТОЙ УКАЗАТЕЛЬ после той строки, и следующая строка запустится по как пустая строка снова. Легко зафиксированный с одним из двух решений: DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
WHERE Name IS NOT NULL
или:
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') +
ISNULL(Name, 'N/A')
FROM People
В зависимости от того, какое поведение Вы хотите (право преимущественной покупки просто фильтрует ПУСТОЙ УКАЗАТЕЛЬ с, вторая опция сохраняет их в списке с сообщением маркера [заменяют and/A' тем, что подходит для Вас]).
У меня нет доступа к SQL Server дома, таким образом, я, предполагают синтаксис здесь, но это более или менее:
DECLARE @names VARCHAR(500)
SELECT @names = @names + ' ' + Name
FROM Names
DECLARE @Names VARCHAR(8000)
SELECT @name = ''
SELECT @Names = @Names + ',' + Names FROM People
SELECT SUBSTRING(2, @Names, 7998)
Это помещает случайную запятую вначале.
Однако при необходимости в других столбцах, или к CSV дочерняя таблица необходимо обернуть это в скалярное определяемое пользователем поле (UDF).
можно использовать путь XML в качестве связанного подзапроса в ИЗБРАННОМ пункте также (но я должен был бы ожидать, пока я не возвращаюсь к работе, потому что Google не делает материала работы дома:-)
сверху ответа Chris Shaffer
, если Ваши данные могут быть повторены Такой как
Tom
Ali
John
Ali
Tom
Mike
Вместо того, чтобы иметь Tom,Ali,John,Ali,Tom,Mike
, можно использовать ОТЛИЧНЫЙ, чтобы избежать дубликатов и добраться Tom,Ali,John,Mike
DECLARE @Names VARCHAR(8000)
SELECT DISTINCT @Names = COALESCE(@Names + ',', '') + Name
FROM People
WHERE Name IS NOT NULL
SELECT @Names
Это работало на меня:
SELECT CarNamesString = STUFF((
SELECT ',' + [Name]
FROM tbl_cars
FOR XML PATH('')
), 1, 1, '')
Вот источник: https://www.mytecbits.com /