2017年3月28日火曜日

Oracle -> MySQL SQL変換メモ

http://terukizm.hatenablog.com/entry/20110801/1312181426

■システム日付
・Oracle
SYSDATE

・MySQL
NOW()
■日付型→文字列型変換(YYYY/MM/DD)
・Oracle:
TO_DATE(TO_CHAR(SYSDATE), 'YY-MM-DD')

・MySQL:
DATE_FORMAT( SYSDATE() , '%Y-%m-%d')
■TRUNC(日付)
・Oracle
TRUNC(SYSDATE)

・MySQL
DATE(SYSDATE())
■ADD_MONTH
・Oracle
ADD_MONTHS(SYSDATE, 1)

・MySQL
DATE_ADD(SYSDATE(),INTERVAL 1 MONTH)
■MONTHS_BETWEEN
・Oracle
MONTHS_BETWEEN(SYSDATE, SYSDATE+1)

・MySQL
DATEDIFF(SYSDATE(), SYSDATE()+1)
■TO_NUMBER
・Oracle
TO_NUMBER('-100')

・MySQL
CAST('-0008000' as signed)
■TO_DATE
・Oracle
TO_DATE('9999/12/31', 'YYYY/MM/DD')

・MySQL
STR_TO_DATE('9999/12/31', '%Y/%m/%d')
■NULL文字変換
・Oracle: 
NVL(exp1,exp2)

・MySQL:
IFNULL(exp1, exp2)

■外部結合
・Oracle:
WHERE
 A.id(+) = B.id

・MySQL:
 FROM A
  RIGHT OUTER JOIN B
    ON (A.id = B.id)


・Oracle:
WHERE
 A.id = B.id(+)

・MySQL:
 FROM A
  LEFT OUTER JOIN B
    ON (A.id = B.id)

2017年3月16日木曜日

Quartz.NETのWeb Interface

Quartz.NETのWeb Interface

https://github.com/guryanovev/CrystalQuartz

最初は、Hangfireを使おうと思ったけど
Quartz.NETに Web Interfaceが有れば便利と思ったら、考えている人がいました。

Quartz.NET自体、日本語情報が少ないので、これから試してみる。

Xamarin.FormsのXAMlでのNavigationPageの表現方法

Xamarin.FormsのNavigationPageの使い方

XAMLでは、表現出来ないそうです。

https://forums.xamarin.com/discussion/17704/navigationpage-in-xaml
NavigationPage doesn't really need markup to work

てっきり、XAMLで表現出来ると思いましたよ。
ContentPageを作って、NavigatePageクラスをかませるとOKだった。

Xamari.Forms + MVVMLightだと、ViewModelクラスに以下の記述をする。

 Command最近買った商品 = new RelayCommand(() => {
                App.Current.MainPage = new NavigationPage(new LatestOrderPage());
            });



2017年3月15日水曜日

Xamarin.Forms:ユーザーデータを保存するには?

Xamarin.Forms:ユーザーデータを保存するには?

PCL Projectでテキストファイルを保存する方法。

元ネタは、@ITより

Nugetより、PCLStorageをinstall

const string SubFolderName = "SampleData";
const string TextFileName = "Sample.txt";

// ユーザーデータを読み取るメソッド
async Task<string> LoadTextAsync()
{
  // ユーザーデータ保存フォルダー
  PCLStorage.IFolder localFolder = PCLStorage.FileSystem.Current.LocalStorage;

  // サブフォルダーを作成、または、取得する
  PCLStorage.IFolder subFolder
    = await localFolder.CreateFolderAsync(SubFolderName,
                          PCLStorage.CreationCollisionOption.OpenIfExists);

  // ファイルを取得する
  PCLStorage.IFile file = await subFolder.GetFileAsync(TextFileName);

  // テキストファイルを読み込む
  // ファイル冒頭に「using PCLStorage;」が必要
  return await file.ReadAllTextAsync();
}
ユーザーデータを読み取るコードの例(C#)
ユーザーデータ保存フォルダーの下の「SampleData」フォルダーにある「Sample.txt」ファイルを読み取って、そのファイルに保存されている文字列を返すメソッド。非同期メソッドなので、呼び出す側はawaitキーワードで終了を待機する必要がある。
また、ファイルがないときは、ファイルを取得するところでFileNotFoundException例外(PCLStorage.Exceptions名前空間)が発生する。呼び出す側で正しく例外をトラップしてほしい。


// 定数定義を再掲
//const string SubFolderName = "SampleData";
//const string TextFileName = "Sample.txt";

// ユーザーデータを書き出すメソッド
async Task<string> SaveTextAsync(string text)
{
  // ユーザーデータ保存フォルダー
  PCLStorage.IFolder localFolder = PCLStorage.FileSystem.Current.LocalStorage;

  // サブフォルダーを作成、または、取得する
  PCLStorage.IFolder subFolder
    = await localFolder.CreateFolderAsync(SubFolderName,
                          PCLStorage.CreationCollisionOption.OpenIfExists);

  // ファイルを作成、または、取得する
  PCLStorage.IFile file
    = await subFolder.CreateFileAsync(TextFileName,
                        PCLStorage.CreationCollisionOption.ReplaceExisting);

  // テキストをファイルに書き込む
  // 冒頭に「using PCLStorage;」が必要
  await file.WriteAllTextAsync(text);

  return file.Path;
}
ユーザーデータを書き出すコードの例(C#)
引数の文字列を、ユーザーデータ保存フォルダーの下の「SampleData」フォルダーにある「Sample.txt」ファイルに書き出すメソッド。非同期メソッドなので、呼び出す側はawaitキーワードで終了を待機する必要がある。
このメソッドは、保存したファイルのフルパスを返すようにしてある。