Ten problem dotyczy tylko przenośności z literałów.
Nie sądzę, że istnieje w pełni przenośny sposób, aby to zrobić, ponieważ SQL Server nie obsługuje słowa kluczowego DATE ANSI, a wszystkie funkcje CAST, CONVERT, TO_DATE i daty nie są identyczne na wszystkich platformach.
Pamiętaj, że Twoje drugie zapytanie można również zapisać jako Select * from MyTable where myDate > '20130410'
.
Byłoby miło, gdyby było wsparcie w SQL Server dla funkcji literowej ANSI DATA (DB/2 i Teradata oba mają to).
Nie mogłem znaleźć elementu Connect w tej sprawie, ani nic w tym, dlaczego SQL Server nie obsługuje literalnych słów kluczowych ANSI DATA, CZAS i TIMESTAMP.
Zastanawiam się w twoim scenariuszu, czy można zamiast tego użyć parametru?
Rozwiązanie w komentarzu Jacka Common SQL to compare dates in SQL Server and ORACLE spowoduje, że ten kod będzie przenośny, ale będziesz musiał mieć nieprzenośną funkcję skalarną. To może być opłacalna opcja - zwróć uwagę, że w SQL Serverze musisz poprzedzić funkcję skalarną swoim schematem - może to wprowadzić kolejną zmarszczkę między kodem Oracle i kodem SQL, jeśli nie możesz uczynić schematów taką samą nazwą (uwaga w Oracle, przedrostek może być nazwą pakietu zamiast schematu, jeśli umieścisz funkcję wewnątrz paczki)
@Aaron Bertrand Nie powyższe nie działa w wyroczni. Występują błędy, mówiąc, że jest to nieprawidłowy miesiąc. – CathalMF
@CathalMF [zależnie od ustawień NLS] (http://www.sqlfiddle.com/#!4/d41d8/9820), o czym wspomniał Ed. –
@JackDouglas - masz rację; Przesadziłem w tym punkcie. Powinienem powiedzieć "niechlujny" lub "ryzykowny" i zostawić to. Będę edytować komentarz. –